[排序] 快速排序(Python)
来源:互联网 发布:大数据hadoop分布式 编辑:程序博客网 时间:2024/06/04 15:51
思想
快速排序(快排)是非常常用的排序方法,在技术面试中出现频率也特别高。它主要采用交换和分治的策略进行排序。是不稳定排序。
步骤:
1、在序列中选一个元素作为划分的基准元素(pivot)
2、将所有不大于pivot的数字放在pivot的前面,大于pivot的数字放在pivot的后面
3、以pivot为界,对前后两个子序列分别递归重复前两步,直至区间内只有一个元素
示例
对序列 [2, 4, 7, 3, 6, 5] 按升序排列,取倒数第一个元素为pivot,tail表示不大于pivot的序列的最后一个数的下标,所以最后基准元素的下标为tail + 1
至此,前后两个子序列划分完毕,下面继续对子序列进行排序
代码
class Solution: # @param {int[]} A an integer array # @return nothing def sortIntegers2(self, A): # Write your code here if A is None or len(A) <= 1: return s = 0 e = len(A) - 1 self.quickSort(A, s, e) def quickSort(self, A, s, e): if s < e: # 基准元素下标 pivot_ind = self.partition(A, s, e) self.quickSort(A, s, pivot_ind - 1) self.quickSort(A, pivot_ind + 1, e) def partition(self, A, s, e): # 选取倒数第一个元素为基准元素 pivot = A[e] # tail表示不大于pivot的序列的最后一个数的下标,所以最后基准元素的下标为tail + 1 tail = s - 1 for i in range(s, e): if A[i] <= pivot: tail += 1 self.swap(A, i, tail) self.swap(A, tail + 1, e) return tail + 1 def swap(self, A, i, j): if i != j: tmp = A[i] A[i] = A[j] A[j]= tmp
选取第一个元素为基准元素
def partition(self, A, s, e): # 选取第一个元素为基准元素 pivot = A[s] # tail表示不小于pivot的序列的第一个数的下标,所以最后基准元素的下标为tail - 1 tail = e+1 for i in range(e, s,-1): if A[i] >= pivot: tail -= 1 self.swap(A, i, tail) self.swap(A, tail - 1 , s) return tail - 1
时间复杂度
快排的时间复杂度比较稳定,为
阅读全文
1 0
- Python--排序--快速排序
- [排序] 快速排序(Python)
- Python排序算法-快速排序
- 排序算法(python)-快速排序
- python 排序之 快速排序
- python快速排序
- 快速排序Python实现
- python快速排序
- 快速排序(python)
- python实现快速排序
- Python实现快速排序
- python 实现快速排序
- Python 快速排序
- python快速排序
- 快速排序 python
- 学习python 快速排序
- Python实现快速排序
- [Python]快速排序
- super与this关键字的用法与区别
- 对象转换为Map集合,使用JSONObject实现
- qt make 异常
- 在vue中给列表中的奇数行添加class
- 10 大深度学习架构:计算机视觉优秀从业者必备(附代码实现)
- [排序] 快速排序(Python)
- 机器学习第三课第一部分(矩阵方向变换,正交矩阵)
- 两道模版题 UOj 35 和 bzoj1036
- jemeter打开.jml文件保错
- C++学习——类的常数据成员/常成员函数
- 【JavaMail】(1)JavaMail简介,通过命令行、Java发邮件
- @RequestMapping 用法详解之地址映射(转)
- Java wait() notify()方法使用实例讲解
- 完美的数字