快速排序算法及时间复杂度分析(原地in-place分区版本)

本文聚焦快速排序算法的实现细节,特别是原地in-place分区版本的partition函数。通过设置storeIndex变量确保小于pivot的元素依次紧邻存放,最终将pivot置于正确位置。递归调用quicksort函数时,需注意边界条件和pivot的选择。平均时间复杂度为O(nlogn),最坏情况为O(n^2)。
摘要由CSDN通过智能技术生成

快速排序算法一般来说是采用递归来实现,其最关键的函数是partition分割函数,其功能是将数组划分为两部分,一部分小于选定的pivot,另一部分大于选定的pivot。我们将重点放在该函数上面。

partition函数总体思路是自从一边查找,找到小于pivot的元素,则将其放到前面去,这样要达到的目的是使小于pivot的元素全部在前面,则大于pivot的元素就必然都在后面了。要达到此目的,有一点必须注意,就是在讲小于pivot的元素放到前面去的时候,一定要是紧挨着存放,否则空隙里面放的就可能会是大于pivot的元素,所以我们设置了一个storeIndex变量,并初始化为left来依次紧挨着存放小于pivot的元素。

由于刚开始并不知道最后pivot的存放位置,所以,需要先将pivot交换到后面去(如果是将大的元素依次放到后面就不需要这样的交换),然后遍历数组,找到小于的pivot的元素,就将其放到storeIndex处,并将storeIndex加1。在partition函数最后将pivot交换到storeIndex处。

在quicksort函数中,应特别注意!首先应当判断left时候小于right,以此作为递归返回的条件,还需根据条件设置pivot。

至于时间复杂度,考虑平均复杂度,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值