求快速排序的例子,Free Pascal的
答案:4 悬赏:50 手机版
解决时间 2021-07-30 23:27
- 提问者网友:感性作祟
- 2021-07-30 15:22
下星期就复赛了,求一个快排的例子来看看,复习一下
最佳答案
- 五星知识达人网友:神鬼未生
- 2021-07-30 17:00
program kuaipai;
var
i,j,k,l,m,n:longint;
a:array[1..1000] of longint;
procedure qsort(m,n:Longint); var
i,j,k,t:longint;
begin
i:=m; j:=n; k:=a[(i+j) shr 1];
repeat
while a[i]>k do inc(i);
while a[j]<k 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 m<j then qsort(m,j);
if i<n then qsort(i,n);
end;
begin
readln(k);
for i:=1 to k do read(a[i]);
qsort(1,k);
j:=0;
for i:=k downto 1 do
begin inc(j);write(a[i]:5);if j mod 10=0 then writeln; end;
end.格式:一行十个,你可以自己改,还有数组的大小。不懂可以加我Q。我也是OIER.
var
i,j,k,l,m,n:longint;
a:array[1..1000] of longint;
procedure qsort(m,n:Longint); var
i,j,k,t:longint;
begin
i:=m; j:=n; k:=a[(i+j) shr 1];
repeat
while a[i]>k do inc(i);
while a[j]<k 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 m<j then qsort(m,j);
if i<n then qsort(i,n);
end;
begin
readln(k);
for i:=1 to k do read(a[i]);
qsort(1,k);
j:=0;
for i:=k downto 1 do
begin inc(j);write(a[i]:5);if j mod 10=0 then writeln; end;
end.格式:一行十个,你可以自己改,还有数组的大小。不懂可以加我Q。我也是OIER.
全部回答
- 1楼网友:第四晚心情
- 2021-07-30 19:14
var
a:array[1..30000] of longint;
s,i,j,k,n,m,x:longint;
procedure try(h,t:longint);
var i,j,x:longint;
begin
i:=h;
j:=t;
x:=a[i];
repeat
while (i<j) and (a[j]>=x) do
j:=j-1;
if i<j then
begin
a[i]:=a[j];
i:=i+1;
end;
while (i<j) and (a[i]<=x) do
i:=i+1;
if i<j then
begin
a[j]:=a[i];
j:=j-1;
end;
until i=j;
a[i]:=x;
i:=i+1;
j:=j-1;
if i<t then try(i,t);
if h<j then try(h,j);
end;
- 2楼网友:玩家
- 2021-07-30 18:53
#include<stdio.h>
int partition(int a[],int p,int r)
{
int x,temp;
int i,j;
x=a[r];
i=p-1;
for(j=p;j<=r-1;j++)
{
if(a[j]<=x)
{
i=i+1;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[i+1];
a[i+1]=a[r];
a[r]=temp;
return i+1;
}
void quicksort(int a[],int p,int r)
{
int q;
if(p<r)
{
q=partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
void main()
{
int i,k;
int b[100];
int m=0;
printf("请输入要排序的个数: ");
scanf("%d",&k);
printf("请输入数:\n");
for(i=0;i<k;i++)
scanf("%d",&b[i]);
quicksort(b,m,k-1);
for(i=0;i<k;i++)
printf("%d ",b[i]);
}
- 3楼网友:一把行者刀
- 2021-07-30 17:31
var
a:array[0..9] of integer = (6,1,3,9,2,5,4,7,0,8);
i:integer;
procedure quicksort(l,r:longint);
var
x,i,j,t :longint;
begin
x:=a[random(r-l+1)+l]; (*随机选取支点*)
i:=l;j:=r;
repeat
while a[i]<x do inc(i);
while a[j]>x 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 quicksort(l,j);
if i<r then quicksort(i,r);
end;
begin
quicksort(0, 9);
for i:=0 to 9 do
write(a[i], ' ');
readln;
end.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯