快排的算法有很多种变型,比较常见的一种如下:
QucikSort( p,q)
Begin
if( p>q) return
r = partition(p,q)
QuickSort(p,r-1)
QuickSort(r+1,q)
End
其中partition函数定义如下:
Partition(p,q)
begin
tmp=A[q];
i = p-1;
for( j = p to q-1)
begin
if( A[j]<=tmp) i++; swap(A[i],A[j]);
end
swap(A[i+1],A[q])
return i+1
end
在执行过程中,下面两个条件保持不变:
1. i之前的元素(包括i)都小于等于A[q];
2. i和j之间的元素(不包括i,j)都大于A[q]; J之外的元素(包括j) 未知;
当for循环运行时,如果A[j]大于tmp,那么j+1,条件2得以维持;如果A[j]小于等于tmp,i增加,同时把 J 位置的元素替换掉原来的元素,条件1得以维持。
当循环结束时,交换q和第一个大于tmp的元素,返回i+1.
当然这个算法的结果是一个升序的排列,如果改成A[j]>=tmp时交换,便会得到降序的排列。
对这个算法的分析需要分成3中,最好,最坏ÿ
算法-QuickSort及其复杂度分析
最新推荐文章于 2024-08-17 23:37:21 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)