排序算法之快速排序

快速排序

快速排序的概念

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列。
是对冒泡排序的一种改进。

快速排序的原理

我们以4,6,8,5,9,200,-1,100,-2,-3这样一个数组来进行示例
首先要找到一个基准数,一般来说我们取数组的第一个数为基准数
进行交换后
然后找到一个k,k的左边都比基准值小,右边都比基准值大

然后我们从数组的右边往左找,记这里的数组下标为Right,进行Right–操作
4>-3所以将4和-3进行交换 此时Right=9

-3,6,8,5,9,200,-1,100,-2,4
接下来从数组左面找,记数组下标为Left,进行Left++操作,
-3<4不动,Left=0
6>4 将6和4进行交换,此时Left=1
-3,4,8,5,9,200,-1,100,-2,6
4>-2 交换 此时Right=8
-3,-2,8,5,9,200,-1,100,4,6
8>4 交换 此时Left=2
-3,-2,4,5,9,200,-1,100,8,6
4>-1 交换 此时Right=6
-3,-2,-1,5,9,200,4,100,8,6
5>4 交换 此时Left=3
-3,-2,-1,4,9,200,5,100,8,6
此时满足基准值左边都比基准值小,右边都比基准值大
此时Left=3,就是k的位置。
然后使用分治的思想
把k值左右两边继续递归操作,直到排序完成

快速排序的性能

快速排序在最坏情况下的时间复杂度和冒泡排序一样,是 O(n2),实际上每次比较都需要交换,但是这种情况并不常见。我们可以思考一下如果每次比较都需要交换,那么数列的平均时间复杂度是 O(nlogn),事实上在大多数时候,排序的速度要快于这个平均时间复杂度。这种算法实际上是一种分治法思想,也就是分而治之,把问题分为一个个的小部分来分别解决,再把结果组合起来。

快速排序只是使用数组原本的空间进行排序,所以所占用的空间应该是常量级的,但是由于每次划分之后是递归调用,所以递归调用在运行的过程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值