pascal 快速排序

请速度给我一个可以由大到小的快速排序看好了要由大到小的快速排序。pascal就要一次性的。。不然我不知道换下啊... 请速度给我一个可以
由大到小的快速排序

看好了 要

由大到小的快速排序。

pascal
就要一次性的。。

不然我不知道 换下啊
展开
 我来答
戚清漪G9
2008-07-27 · TA获得超过846个赞
知道答主
回答量:76
采纳率:0%
帮助的人:0
展开全部
...
一次性..?
不明白..
不过还是给个100%正确的给你..
书上抄的哈..
希望对你有帮助...

var,k,l,a,n:longint;
s:array[1..32767] of longint;
procedure qsort(lx,rx:integer);
var i,j,t:longint;
begin i:=lx;j:=rx;t:=s[i];
repeat while (s[j]>t) and (j>i) do
begin k:=k+1;
j:=j-1;
end;
if i<j then begin s[i]:=s[j];i:=i+1;l:=l+1;
while (s[i]<t) and (i<j) do
begin k:=k+1;
i:=i+1;
end;
if i<j then begin s[j]:=s[i];j:=j-1;l:=l+1;end;
end;
until i=j;
s[i]:=t;i:=i+1;j:=j-1;l:=l+1;
if lx<j then qsort(lx,j);
if i<rx then qsort(i,rx);
end;
begin read(n);
for a:=1 to n do
read(s[a]);
k:=1;l:=1;
qsort(1,n);
for a:=1 to n do
write(s[a]);
end.

单步运行..自己看看再"研究"一下...
别人说的意思你未必听得明白...
自己理解最好的..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
枫舞之谷
2008-08-03
知道答主
回答量:10
采纳率:100%
帮助的人:8.5万
展开全部
LZ 相信书上的吧!要这电子书的,叫我。o(∩_∩)o...

快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束.

例:输入一组数据小到大排序.

程序1:

program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i:integer;
procedure quicksort(var b:arr; s,t:integer);
var i,j,x,t1:integer;
begin
i:=s;j:=t;x:=b[i];
repeat
while (b[j]>=x) and (j>i) do j:=j-1;
if j>i then begin t1:=b[i]; b[i]:=b[j];b[j]:=t1;end;
while (b[i]<=x) and (i<j) do i:=i+1;
if i<j then begin t1:=b[j];b[j]:=b[i];b[i]:=t1; end
until i=j;
b[i]:=x;
i:=i+1;j:=j-1;
if s<j then quicksort(b,s,j);
if i<t then quicksort(b,i,t);
end;
begin
write('input data:');
for i:=1 to n do read(a[i]);
writeln;
quicksort(a,1,n);
write('output data:');
for i:=1 to n do write(a[i]:6);
writeln;
end.

程序2:

program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i:integer;
procedure quicksort(var b:arr; s,t:integer);
var i,j,x:integer;
begin
i:=s;j:=t;x:=b[i];
repeat
while (b[j]>=x) and (j>i) do j:=j-1;
if j>i then begin b[i]:=b[j];i:=i+1;end;
while (b[i]<=x) and (i<j) do i:=i+1;
if i<j then begin b[j]:=b[i];j:=j-1; end
until i=j;
b[i]:=x;
i:=i+1;j:=j-1;
if s<j then quicksort(b,s,j);
if i<t then quicksort(b,i,t);
end;
begin
write('input data:');
for i:=1 to n do read(a[i]);
writeln;
quicksort(a,1,n);
write('output data:');
for i:=1 to n do write(a[i]:6);
writeln;
end.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
631428700
2008-07-29 · TA获得超过929个赞
知道答主
回答量:62
采纳率:0%
帮助的人:0
展开全部
一、 随机函数的使用。
Randomize 随机函数发生器
Random ()
随机产生10 个1000以内的数。

二、 熟练掌握快排原理(这是一种比较简洁的书写方法,举一实例自己验证,务必记住,对于排序还应高度熟练选择排序)。
快排原理,二分原理。
1、 在待排数列中随机产一个比较关健字key。
2、 从数组左边开始,找一个不小于关健字的数a[i],从数组右边开始找一个不大于关健字的数a[j]。
3、 如果i<=j 交换a[i]和a[j],并且inc(i),dec(j)。
4、 返回第2步,直到i>j。
5、 从左边部分继续第1步,从右边部分找继续第1步。
样例:1 7 2 3 5 4 6 9
单位时间。
const
maxn=100000;
var
i,n:longint;
a:array[1..maxn] of longint;

procedure qsort(l,r:longint);
var
key,t,i,j:longint;
begin
if l>=r then exit;
i:=l;
j:=r;
key:=a[l+random(r-l+1)];
repeat
while (a[i]<key) do
inc(i);
while (a[j]>key) 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;
qsort(l,j);
qsort(i,r);
end;

begin
read(n);
randomize;
for i:=1 to n do
read(a[i]);
qsort(1,n);
for i:=1 to n do
write(a[i],' ');
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xm蔡淳
2012-07-01
知道答主
回答量:34
采纳率:0%
帮助的人:25.9万
展开全部
procedure qsort(l,r:integer);
var
i,j,mid,p:integer;
begin
i:=l;
j:=;
mid:=a[(l+r)div 2];
repeat
while a[i]>mid do inc(i);
while a[j]<mid do dec(j);
if i<=j then
begin
p:=a[i];a[i]:=a[j];a[j]:=p;
inc(i);
dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
littledlt
2008-07-24 · TA获得超过1719个赞
知道小有建树答主
回答量:1030
采纳率:0%
帮助的人:692万
展开全部
var a,b,c:integer;
z:array[1..500]of longint;
procedure dog(x,y:longint);
var i,j,k,o:longint;
begin
i:=x; j:=y;
k:=z[(i+j)div 2];
repeat
while z[i]<k do inc(i);
while z[j]>k do j:=j-1;
if i>=j then begin
o:=z[i];z[i]:=z[j];z[j]:=o;
inc(i); j:=j-1;
end;
until i>j;
if x<j then dog(x,j);
if i<y then dog(i,y);
end;
begin
readln(a);
for b:=1 to a do read (z[b]);
dog(1,a);
for b:=1 to a do write(z[b],' ');
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式