- 0
- 0
- 约2.33千字
- 约 2页
- 2025-06-27 发布于四川
- 举报
快速排序(QuickSort)
1.基本思想:
在当前无序区R[1..H]中任取一个数据元素作为比较的基准(不妨记为X),用此基准将
当前无序区划分为左右两个较小的无序区:R[1..I-1]和R[I+1..H],且左边的无序子区中数据
元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则
位于最终排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),当R[1..I-1]和R[I+1..H]均
非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。
2.排序过程:
【示例】:
初始关键字[4938659776132749]
第一次交换后[2738659776134949]
第二次交换后[2738499776136549]
J向左扫描,位置不变,第三次交换后[2738139776496549]
I向右扫描,位置不变,第四次交换后[2738134976976549]
J向左扫描[2738134976976549]
(一次划分过程)
初始关键字[4938659776132749]
一趟排序之后[273813]49[76976549]
二趟排序之后[13]27[38]49[4965]76[97]
三趟排序之后1327384949[65]7697
最后的排序结果1327384949657697
各趟排序之后的状态
ProcedureParttion(VarR:FileType;L,H:Integer;VarI:Integer);
//对无序区R[1,H]做划分,I给以出本次划分后已被定位的基准元素的位置//
Begin
I:=1;J:=H;X:=R[I];//初始化,X为基准//
Repeat
While(R[J]=X)And(IJ)Do
begin
J:=J-1//从右向左扫描,查找第1个小于X的元素//
IfIJThen//已找到R[J]〈X//
begin
R[I]:=R[J];//相当于交换R[I]和R[J]//
I:=I+1
end;
While(R[I]=X)And(IJ)Do
I:=I+1//从左向右扫描,查找第1个大于X的元素///
end;
IfIJThen//已找到R[I]X//
beginR[J]:=R[I];//相当于交换R[I]和R[J]//
J:=J-1
end
UntilI=J;
R[I]:=X//基准X已被最终定位//
End;//Parttion//
ProcedureQuickSort(VarR:FileType;S,T:Integer);//对R[S..T]快速排序//
Begin
原创力文档

文档评论(0)