python 快速排序 详解_数据结构与算法:快速排序(原理讲解+python实现)

快速排序

快速排序是一种基于分治法(Divide and Conquer)的排序算法 它之所以称为快速排序是因为它的平均时间复杂度为O(nlogn),最坏情况下是O(n2) 但是这样的情况不常见 一般需要每次划分的左右两边元素个数为1个和n-1个 比如已排好序的数组。大部分的情况都会是大致均匀划分的情况。

原理讲解

基于分治法,快速排序操作步骤如下:

1. 选择一个基准值(pivot) 在这里 我选择列表第一个元素作为基准值

2.将数组中比pivot小于或者等于的元素交换到pivot前面;将比pivot大于的元素交换到pivot后面

3.将已经分好的两个左右子列表 重复2操作

107bad72817d105cf9561931b4b9f73a.png

Python实现

1 defgetIndex(arr, l, r):2 tmp = arr[l] #10

3 while (l

6 arr[l] =arr[r]7 while (l=arr[l]):8 l += 1

9 arr[r] =arr[l]10 arr[l] =tmp11 returnl12

13 defQuickSort(arr, l, r):14 if l<15 index="getIndex(arr," l r quicksort index-1>

19 if __name__ == '__main__':20 Arr = [10, 20, 30, 40 ,50]21 QuickSort(Arr, 0, len(Arr)-1)22 print(Arr)

时间、空间复杂度;稳定性分析

时间复杂度:平均时间复杂度为O(nlogn); 最好O(nlogn) 最差O(n*n). 最理想的情况就是每次折半时都能够分成均匀的两半。最差的情况是每次折半只确定一个元素的位置结果就是要分n次

空间复杂度:代码没有显示开辟新内存 所以O(1) 但是在递归过程中会在后台利用队栈空间存储递归过程中的临时变量 分治的时候用到了递归 所以平均为O(1*logn). 最差是O(n)

稳定性:快速排序为不稳定排序 在交换元素过程中相同元素顺序会发生改变。例如:列表[3,4,5,3,2], 两个3的顺序就会在交换过程发生改变

总结

刚刚写技术博客 每一次写都比预算要的时间要长 而且博客的质量也很一般 但是 无论再精致的博客 也是从开始一篇篇累积一点点成长 到最后写一篇技术博客 用时固定 而且质量高。我唯一要做的就是坚持下去不间断。加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值