分治法-----快速排序

1.算法思想

   将待排序列通过一趟扫描分割成独立的三个序列:第一个序列中的所有元素均小于基准元素,第二个序列是基准元素,第三个序列中的所有元素大于基准元素,由于第二序列已出于正确位置,按同样的方法对第一个序列和第三个序列分别进行排序,整个序列过程递归进行,最终实现整个序列有序

2.快速排序的分治法体现

   利用分治法对快速排序的描述: 设待排序列为R[low:high],其中low<=high。用分治法分三步处理:

  1.分解

    在R[low:high]中选一个元素作为基准元素(pivot)该基准元素的位置(pivotpos)在划分的过程中确定,以此基准元素为标准将待排序列划分为两个子序列R[low,pivotpos-1]和R[pivotpos+1,high],并使序列R[low,pivotpos-1]中的所有元素均小于等于R[pivotpos],序列R[pivotpos+1,high]中的所有元素大于等于R[pivotpos],此时基准元素已位于正确位置

  2.求解子问题

   对两个子序列R[low,pivotpos-1]和R[pivotpos+1,high],分别进行递归调用快速排序算法进行排序

  3.合并


3.划分方法

   待排序列为R[low,high],以第一个元素为基准元素

   步骤1:设两个参数i和j,它们的初值分别为待排序列的上界和下界,即i=low,j=high

   步骤2:选取待排序列的第一个元素R[low]作为基准元素,并将该值赋给变量pivot

   步骤3:令j自j位置开始向左扫描,如果j位置所对应的元素的值大于等于pivot。则j--,重复该过程,直到找到第一个小于pivot的元素R[j],将R[j]和R[i]进行交换,i++

   步骤4:令i自i位置开始向右扫描,如果i位置所对应的元素的值小于等于pivot。则i++,重复该过程,直到找到第一个大于pivot的元素R[i],将R[j]和R[i]进行交换,j--

  步骤5:重复步骤3和4,交替改变扫描方向,从两端各自往中间靠拢直至i=j,此时i和j指向同一个位置,即基准元素pivot的最终位置

4.算法实现

  

5.运行结果

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值