快速排序之“挖坑法”

想要了解快速排序,我们将其与冒泡排序加以对比说明。

快速排序

(都是交换排序:通过元素之间的比较和交换位置来达到排序的目的)是从冒泡排序演变而来的算法,但是比冒泡排序要高效得多。因为其使用了【分治法】。

快速排序的操作过程:在每一轮挑选一个基准元素,并让其他比他大的元素移动到数列一边,比他小的元素移动到数列另一边,从而把数列拆解成了两个部分。(分治法的思路)

紫色:基准元素

黄色:不基准元素大的元素

绿色:比基准元素小的元素

基准元素的选择

一般情况下选择第一个元素,这在绝大多数情况下是没有问题的。

但是最坏的情况下,若是一个逆序的数列,期望排成顺序数列,这种情况下,快速排序需要进行N轮,时间复杂度与冒泡排序一样为O(N^2)。所以为了避免这种情况的发生,我们可以随机选择一个元素作为基准元素

元素的移动

把其他元素当中小于基准元素的的都移动到基准元素一边,大于基准元素的移动到另一边。

实现方法:

挖坑法

首先我们选定基准元素Pivot,并记住这个位置index,这个位置相当于一个“坑”,并且设置两个指针 left 和 right ,指向数列的最左和最有两个元素。

接下来,从right指针开始,把指针所指向的元素和基准元素做比较。如果比pivot大,则right指针向左移动;如果比pivot小,则把right所指向的元素填入坑中

4>2,所以4的位置不变,将right指针左移继续比较,right右边黄色的区域代表着大于基准元素的区域。

1<2,所以把1填入基准元素所在位置,也就是坑的位置。这时候,元素1本来所在的位置成为了新的坑。同时,left向右移动一位。


此时,left左边绿色的区域代表着小于基准元素的区域,接下来,我们切换到left指针进行比较。如果left指向的元素小于pivot,则left指针向右移动;如果元素大于pivot,则把left指向的元素填入坑中。


下面按照这个思路继续排序:

这时候,把之前的pivot元素,也就是2放到index的位置。此时数列左边的元素都小于2,数列右边的元素都大于2,这一轮交换终告结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值