搞定面试官——图解快排

心得,搞不懂的算法就动手画一画,一步步来,不要着急。
排序效率在O(nlogn)中效率最高,思想是使用分治法策略把一个序列分为两个子序列,将>基准数的放到该基准数的右边;将<=基准数的放到该基准数的左边
基本步骤:

  • 先从序列中取出一个数作为基准数
  • 分区过程:将把这个数大的数全部放到它的右边小于或者等于它的数全部放到它的左边
  • 递归地对左右子序列进行步骤2,直到个区间只有一个数。

根据大神的解读,可以形象地将此过程描述成挖坑填数+分治法

有一个数组arr={72,6,57,88,60,42,83,73,48,85,}
挖坑填数过程:

  • 选取arr[0]为基准数,temp=arr[0]=72,相等于在0这个位置挖了一个坑
    在这里插入图片描述
  • 从j开始向前找一个小于或等于temp的数,找到当j=8这个位置,将arr[8]挖出,填到0这个位置,i++从而在8这个位置出现一个坑
    在这里插入图片描述
  • 这次从i开始向后找一个大于temp的数,找到当i=3这个位置,将arr[3]挖出,填到8这个位置,j–,从而在3这个位置出现了一个新坑
    在这里插入图片描述
  • 再从j这个位置向前找一个小于或等于temp的数,找到当j=5这个位置,将arr[5]挖出,填到3这个位置,i++,从而在5这个位置出现一个新坑
    在这里插入图片描述
  • 由于i==j,且i=j=5,而5的位置恰好是上次挖的坑,因此将temp填入arr[5]
    在这里插入图片描述
    如上图,此时arr[5]之前的数字都小于等于它,arr[5]之后的数字都大于它,那么就在对arr[0…4]和arr[6…9]进行子区间重复上述步骤。

时间复杂度:

  • 最好情况下为O(nlogn)
  • 最坏情况下为O(n^2)

时间复杂度与基准数的选择密不可分,因此快速排序是不稳定的。对于基准数的选择有以下几种方式:

  • 固定基准数
  • 随机基准数
  • 三数取中:使用左端、右端、中心位置上的是哪个元素的中值作为基准元
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值