快速排序(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这个函数,自己手动排几个数,就能明白其中的原因了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值