快速排序
排序算法 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|
冒泡排序 | O ( n 2 ) O(n^2) O(n2) | O ( 1 ) O(1) O(1) | 稳定 |
选择排序 | O ( n 2 ) O(n^2) O(n2) | O ( 1 ) O(1) O(1) | 不稳定 |
插入排序 | O ( n 2 ) O(n^2) O(n2) | O ( 1 ) O(1) O(1) | 稳定 |
希尔排序 | O ( n log 2 n ) O(n\log^2 n) O(nlog2n) | O ( 1 ) O(1) O(1) | 不稳定 |
归并排序 | O ( n log 2 n ) O(n\log^2 n) O(nlog2n) | O ( n ) O(n) O(n) | 稳定 |
快速排序 | O ( n log n ) O(n\log n) O(nlogn) | O ( log n ) O(\log n) O(logn) | 不稳定 |
堆排序 | O ( n log n ) O(n\log n) O(nlogn) | O ( 1 ) O(1) O(1) | 不稳定 |
计数排序 | O ( n + k ) O(n+k) O(n+k) | O ( k ) O(k) O(k) | 稳定 |
基数排序 | O ( n × k ) O(n\times k) O(n×k) | 稳定 | |
桶排序 | O ( n ) O(n) O(n) | O ( m ) O(m) O(m) | 稳定 |
1. 算法思路
快速排序是一个采用分而治之思路的递归算法,对于一个待排序数列,快速排序会从数列中挑出一个元素,称为“基准”(pivot),将数列中所有比基准值小的元素移动到基准的前边,将所有比基准值大的元素移动到基准的后边,再递归的用该方法排序大于以及小于基准的子数列。
2. 算法实现
话不多说直接上图!!!
def quick_sort(arr, start, end):
if start >= end:
return
pivot = partition(arr, start, end)
quick_sort(arr, start, pivot - 1)
quick_sort(arr, pivot + 1, end)
def partition(arr, start, end):
lt, pivot = start, end
for i in range(start, end):
if arr[i] < arr[pivot]:
arr[lt], arr[i] = arr[i], arr[lt]
lt += 1
arr[lt], arr[end] = arr[end], arr[lt]
return lt
图片及知识来源
<<算法导论>>第7章堆排序
本博客文章仅供博主学习交流,博主才疏学浅,语言表达能力有限,对知识的理解、编写代码能力都有很多不足,希望各路大神多多包涵,多加指点。