快速排序(quick sort) C++

        快速排序是个递归的过程,采取分而治之的思想。直接举例:
有10个数:1,3,7,9,5,8,10,2,4,6;

第一步:取最后一个数 6 为节点:
第二步:将小于6的放到左边,大于6的放到右边,结果:1,2,5,2,4,8,10,9,7, 6 (6为节点)
第三步:将6和8进行交换,结果:1,2,5,2,4,6,10,9,7,8(6为节点),小于6的在左边,大于6的在右边,整个过程的算法的复杂度为O(n);
第四步:将节点的位置返回,6是第6个数,就返回位置5。
第五步:递归调用:对左边5个数进行前4步操作,右边4个数进行前4步操作。
前四步伪代码《算法导论》:
PARTITION(A,p,r)    
x=A[r]
i=p-1
for j=p to r-1
    if  A[j]<=x
          i=i+1
          swap(A[i],A[j])   //完成前2步操作
swap(A[i+1],A[r])      //完成第3步操作
return i+1     //返回节点的位置

递归的伪代码:

QUICKSORT(A,p,r)

if   p<r

q=PARTITION(A,p,r)   //对数组进行初步整理

QUICKSORT(A,p,q-1)   //递归节点6左边的数

QUICKSORT(A,q+1,r)   //递归节点6右边的数

完整程序如下:
结果:
此程序最难的部分在于priotSwap这个函数,自己手动排几个数,就能明白其中的原因了。



猜你喜欢

转载自blog.csdn.net/cysisu/article/details/79948729