培训学案算法排序快速.pdfVIP

  • 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)

1亿VIP精品文档

相关文档