快速排序(霍尔划分)

快速排序

大家看到快速排序,想必都会觉得此类排序方法很快吧。的确,该种算法排序效率比较高。那么,什么是快速排序呢?
在快速排序中,选择一个基准值,后,遍历这个数列,通过一定的划分算法,将基准值放到合适的位置,若是升序排序,则基准值的前面全部是小于基准值的数,其后全是大于基准值的数,即通过一趟快速排序后,基准值找到了自己合适的位置,继续递归进行快速排序,直到整个数列变成有序。
快速排序其一的划分为霍尔划分,接下来我们就看看霍尔划分是如何实现的吧

霍尔划分

选定一个基准值,规定begin指向最左边的值,end指向最右边的值。从end向前找第一个小于基准值的数,找到后,再从begin向后寻找第一个大于基准值的数,此时交换两个数后,继续从此刻end的位置向前找第一个小于基准值的数,再从begin位置向后找第一个大于基准值的数,找到后,两数进行交换,重复如此,直到end和begin相遇,再交换end与begin相遇的值和基准值,此时,一趟快速排序便结束了,基准值也就找到了自己合适的位置,基准值的左右两边又是新的无序序列,这时只需要递归的进行快速排序即可,便于理解,上图
在这里插入图片描述
比如这个无序数列,我们选定28为基准值,则begin和end的位置如上图,此刻我们开始进行霍尔划分如下图
在这里插入图片描述
我们从后向前找到一个小于28的数是5,再从前向后找第一个大于28的数是32,所以我们交换这两个数。继续寻找满足要求的两个数交换,如下
在这里插入图片描述
同样的2和60也满足条件我们交换后如上图下方所示。这时我们继续使end向前找,发现begin和end重合,那这

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值