数据结构 8 基础排序算法详解、快速排序的实现、了解分治法

快速排序

快速排序与冒泡排序一样,同样是属于交换排序 叫做快速排序也是有原因的。因为它采用了分治法的概念

image.png

其中最重要的一个概念就是 基准元素

冒泡排序每一轮将一个最大的元素挑选出并移动到右侧。

分治法思想

在每一轮当中。通过确定基准元素,将元素分为两部分,分别大于小于基准元素。而后的一轮中。还是通过原来的方式,在这两轮中继续找寻基准元素,直至不可再细分为止。

image.png

最重要的两个地方:

基准元素的选择 pivot

基准元素的确认一般是选择当前数列的第一个元素,但这种方法确实不太靠谱,一般情况会通过随机选择的方式选择一个基准元素。这样一来,也能避免某些特殊数列 导致的时间复杂O(N^2);

通过随机选择的方式,可以将时间复杂度调整至O(Nlogn);

元素的移动

通过随机的方式选择元素后,接下来就是元素的移动

移动就是将元素分别移动到基准元素两侧,左侧比基准元素小,右边则比基准元素大。

这里有两种元素的移动方式:

  1. 挖坑法
  2. 指针交换法

挖坑法

拟定一个无序数列{4,7,6,5,3,2,9,1}要求将这个数列从小到大依次排列,我们采用挖坑法进行实现。

image.png

挖坑法最重要的地点在于:指定左右指针(left,right)基准元素下标index。基准元素Pivot.

假设我们通过随机法选择基准元素Pivot = 4 它的下标index=1表示一个坑,并且选择了左右的指针left/right

image.png

1、从右边指针right开始 和基准元素进行比较。若右指针元素大于基准元素,则指针向下移动一位。若小于则将这个元素填入坑里面。将坑的位置记录下来。

此时我们的右边指针元素1<4 则将右边指针元素1 填入首位的坑index
里面。这个时候因为1已经跑到首位去了。所以当前的位置就又成为了一个新的坑,接下来要操作左边指针left 将左边指针移动一位。如下图所示

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值