【算法——Python实现】快速排序的优化:三路快速排序及Leetcode题目应用
来源:互联网 发布:学生成绩数据表格 编辑:程序博客网 时间:2024/06/05 19:05
相比于普通的快速排序,优化点在于:
1.解决数组近乎有序的情况下算法复杂度会退化为O(n2)级别的问题
2.解决数组中有大量重复元素带来的复杂度退化问题
import randomdef quicksort(arr, left, right): # 只有left < right 排序 if left < right: # pivot_index = partition(arr, left, right) random_index = random.randint(left, right) arr[left], arr[random_index] = arr[random_index], arr[left] pivot = arr[left] lt = left # arr[left+1...lt] < v gt = right + 1 # arr[gt...right] > v i = left + 1 # arr[lt+1...i] == v while i < gt: if arr[i] < pivot: arr[i], arr[lt+1] = arr[lt+1], arr[i] lt += 1 i += 1 elif arr[i] > pivot: arr[i], arr[gt-1] = arr[gt-1], arr[i] gt -= 1 else: i += 1 arr[left], arr[lt] = arr[lt], arr[left] quicksort(arr, left, lt-1) quicksort(arr, gt, right)
Leetcode题目应用:
第75题 Sort Colors
给定一个有n个元素的数组,数组中元素的取值只有0,1,2三种可能,为这个数组排序。
class Solution(object): def sortColors(self, nums): # 运用三路快速排序思路,只对数组遍历一遍 # 时间复杂度O(n),空间复杂度O(1) zero = -1 # nums[0...zero] == 0 two = len(nums) # nums[two...n-1] == 2 i = 0 # nums[zero+1...i] == 1 while i < two: if nums[i] == 0: nums[i], nums[zero + 1] = nums[zero + 1], nums[i] zero += 1 i += 1 elif nums[i] == 2: nums[i], nums[two - 1] = nums[two - 1], nums[i] two -= 1 else: i += 1
阅读全文
0 0
- 【算法——Python实现】快速排序的优化:三路快速排序及Leetcode题目应用
- 三种快速排序算法以及快速排序的优化
- 三种快速排序算法以及快速排序的优化
- 三种快速排序算法以及快速排序的优化
- 三种快速排序算法以及快速排序的优化
- 三种快速排序算法以及快速排序的优化
- 三种快速排序算法以及快速排序的优化
- 快速排序及优化算法(三向切分的快速排序)
- 快速排序的三种实现及两种优化
- 快速排序算法及python代码实现
- 排序算法—快速排序算法分析与实现(Python)
- 快速排序算法及优化
- 快速排序算法及优化
- 算法基础:排序(三)——快速排序——Python实现
- 快速排序算法原理及实现(单轴快速排序、三向切分快速排序、双轴快速排序)
- 【手写排序算法及优化】快速排序
- 快速排序算法的Python实现
- 算法题目---快速排序
- xml 格式数据与实体相互转换
- Bitmap的加载和Cache
- 集合中list,set,map的区别?
- JavaScript function对象
- VSCode插件开发
- 【算法——Python实现】快速排序的优化:三路快速排序及Leetcode题目应用
- 一步步用python制作游戏外挂
- 关于项目中新的controller层@RequestMapping找不到的问题
- 在顺序表A中删除B、C中重复的元素
- 对Hibernate中的事务理解
- tetsng 6.11,selenlum 3.6 firefox56 和geckodriver v0.19.0
- JS websocket 连接ActiveMQ
- HBase内置过滤器的总结
- 房地产项目