快速排序
取一个元素p(第一个元素),使元素p归位
列表被p分成两部分,左边都比p小,右边都比p大
递归完成排序
算法关键点
- 整理
- 递归(递归深度)
排序方法 | 最好情况 | 一般情况 | 最坏情况 |
---|---|---|---|
快速排序 | O(nlogn) | O(nlogn) | O(n^2) |
冒泡排序 | O(n) | O(n^2) | O(n^2) |
代码实现
import random
# 分区函数
def partition(lst, left, right):
tmp = lst[left]
while left<right:
while left<right and lst[right]>=tmp:
right -= 1
lst[left] = lst[right]
while left<right and lst[left]<=tmp:
left += 1
lst[right] = lst[left]
lst[left] = tmp
return left
# 快速排序
def quick_sort(lst, left, right):
if left < right:
mid = partition(lst, left, right)
quick_sort(lst, left, mid-1)
quick_sort(lst, mid+1, right)
lst = list(range(10))
random.shuffle(lst)
quick_sort(lst, 0, len(lst)-1)
print(lst)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]