pascal问题 快速排序

来源:百度知道 编辑:UC知道 时间:2024/09/21 10:46:55
书上的感觉太啰嗦了,现在题目简化:
输入10个数,用快速排序按从小到大排序后输出。写出最简源程序。
(顺便解释一下快排里为什么会用到随机?)

procedure oo(l,r:longint);
var
i,j,k,x,y:longint;
begin
i:=l;
j:=r;
x:=a[(l+r) shr 1];
repeat;
while x<a[i] do inc(i);
while x>a[j] do dec(j);
if i<=j then begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
inc(i);
dec(j);
end;
until i>j;
if i<r then oo(i,r);
if l<j then oo(l,j);
end;

懒得敲了,直接从以前程序copy了段过程
对a数组进行从小到大排序,l是要排序数组起始位置,r是结束位置
没用随机而是取中,随机只是防止最坏情况而已最坏复杂度为n的平方

顶楼上

啰嗦归啰嗦
还是要自己啃的
自己啃下来才是自己的东西
相信你看了楼上的也不是很懂
还是自己啃吧