发布网友 发布时间:2023-07-16 06:15
共2个回答
热心网友 时间:2024-12-13 06:57
这里是完全程序,过程部分为快排
program qsort;
var n,p:integer;
a:array[0..100000] of integer;
procere qs(l,r:integer);//假设被排序的数组是a,且快排后按升序排列)
var i,j,m,t:integer;
begin
i:=l;
j:=r;//(l(left),r(right)表示快排的左右区间)
m:=a[(l+r)div2];//注意:本句不能写成:m:=(l+r)div2;
repeat
while a[i]<m do inc(i);
while a[j]>m do dec(j);//若是降序把'<'与‘>'互换;
if i<=j then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
inc(i);
dec(j);
end;
until i>j;
if l<j then qs(l,j);//递归查找左区间
if i<r then qs(i,r);//递归查找右区间
end;
begin
readln(n);//有n个数据要处理
for p:=1 to n do read(a[p]);//输入数据
qs(1,n);
for p:=1 to n do write(a[p],'');//输出快排后的数据
end.
或者
procere quickSort(var a:array of integer;l,r:Integer);
var i,j,x:integer;
begin
if l>=r then exit;
i:=l;
j:=r;
x:=a[i];
while i<=j do
begin
while (i<j)and(a[j]>x) do dec(j);
if i<j then
begin
a[i]:=a[j];
inc(i);
end;
while (i<j)and(a[i]<x) do inc(i);
if i<j then
begin
a[j]:=a[i];
dec(j);
end;
a[i]:=x;
quicksort(a,l,i-1);
quicksort(a,i+1,r);
end;
end;
#include <iostream>
using namespace std;
void Qsort(int a[], int low, int high)
{
if(low >= high)
{
return;
}
int first = low;
int last = high;
int key = a[first];/*用字表的第一个记录作为枢轴*/
while(first < last)
{
while(first < last && a[last] >= key)
{
--last;
}
a[first] = a[last];/*将比第一个小的移到低端*/
while(first < last && a[first] <= key)
{
++first;
}
a[last] = a[first];
/*将比第一个大的移到高端*/
}
a[first] = key;/*枢轴记录到位*/
Qsort(a, low, first-1);
Qsort(a, first+1, high);
}
int main()
{
int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*这里原文第三个参数要减1否则内存越界*/
for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
cout << a[i] << "";
}
return 0;
}/*参考数据结构p274(清华大学出版社,严蔚敏)*/
热心网友 时间:2024-12-13 06:57
不知道是哪种语言?我的想法是把所有数字两个两个进行比较,如x1>x2则x1放到x2的前面(按照从大到小排列)然后以此类推。基本上一个for循环就能解决追问有没有完整的用visual basic 6.0制作的视频,谢谢