高手解释下这程序!(排序)

来源:百度知道 编辑:UC知道 时间:2024/06/28 07:23:47
PROCEDURE SQRT(P,Q:INTEGER);
VAR I,J,K,X:INTEGER;
BEGIN
I:=P;
J:=Q;
X:=A[(I+J)DIV 2];
REPEAT
WHILE A[I]<X DO INC(I);
WHILE A[J]>X DO DEC(J);
IF I<=J THEN BEGIN
K:=A[I];
A[I]:=A[J];
A[J]:=K;
INC(I);
DEC(J);
END;
UNTIL I>J;
IF I<Q THEN SQRT(I,Q);
IF J>P THEN SQRT(P,J);
END;

详细 详细!!! 详细!!

快速排序的递归算法。

书上没有有很详细的解释吗?
可以搜索一下“快速排序”,网络上很多地方有详尽的关于“快速排序”的解释。要一句一句地解释你那程序,打字太辛苦啊~~我畏难~

建议你先把“冒泡排序”搞透,还要把“递归”的概念搞懂!

我从网络上搜索来的一个例子:
http://student.zjzk.cn/course_ware/data_structure/web/jingcaiwenzhang/wenzhang7.htm

快速排序

算法的基本思想:
快速排序的基本思想是基于分治策略的。对于输入的子序列ap..ar,如果规模足够小则直接进行排序,否则分三步处理:
分解(Divide):将输入的序列ap..ar划分成两个非空子序列ap..aq和aq+1..ar,使ap..aq中任一元素的值不大于aq+1..ar中任一元素的值。
递归求解(Conquer):通过递归调用快速排序算法分别对ap..aq和aq+1..ar进行排序。
合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在ap..aq和aq+1..ar都排好序后不需要执行任何计算ap..ar就已排好序。
这个解决流程是符合分治法的基本步骤的。因此,快速排序法是分治法的经典应用实例之一。

算法Quick_Sort的实现:

Pascal实现:
Procedure Quick_Sort(p,r:TPosition;var L:TList); {快速排序}
var
q:TPosition;
begin
if L[p..r]足够小 then Sort(p,r,L) {若L[p..r]足够小则直接对L[p..r]排序}
else
be