free pascal快排

来源:百度知道 编辑:UC知道 时间:2024/05/28 10:29:56
free pascal快排有讲解的讲一下。给段程序

总之是分治问题 可采用二分法
例1、快速排序
[分析] 设N个元素A[1..N],要求按非递减排序。
选择某一个元素X(一般取中间那个,初始时设i=1,j=N,则X=a[(i+j) div 2]),从两头(A[i]、A[j])开始逐个与X比较,找到左边比它大的那个元素A[i]和右边比它小的那个元素A[j],则交换A[i]与A[j] ,一举两得,然后inc(i)、dec(j)再继续进行,直到i>j。则这一趟结束,效果是X一定排在了它应该在的位置上了。
然后,对X左右两边的部分进行类似的递归操作。实际上是一种二分思想,即把大于某个数的所有数交换到它的右边,而把小于它的数都交换到左边。如此这般递归下去,直到都符合要求为止。
procedure qsort(l,r: longint);
var i,j,x,y: longint;
begin
i:=l;j:=r; x:=a[(l+r) div 2];
repeat
while a[i]<x 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 l<j then qsort(l,j);
if i<r then qsort(i,r);
end;

给你标准的快排
procedure kp(l,r:longint);
var i,j,x,o:longint;
begin
i:= l; j:= r; x:= a[(i + j) div 2];
repeat
while (a[j] > x) do dec(j);