快速排序——快!
思路
- 去一个元素p(第一个元素),是元素p归位
- 列表被p分成两部分,左边都比p小,右边都比p大
- 递归完成排序
总体递归函数思路
def quick_sort(data,left,right):
if left<right:
mid=partition(data,left,right) #partition()为自定义归为函数,返回坐标
quick_sort(data,left,mid-1)
quick_sort(data,mid+1,right)
如何归位?——partition函数
def partition(data, left, right):
a = data[left]
while left < right:
while data[right] >= a and left < right: # 从右边找到值小于a的数的位置
right = right - 1
data[left] = data[right] # 把有右边的值写到左边
while data[left] <= a and left < right: # 从左边找到值大于a的数的位置
left = left + 1
data[right] = data[left] # 把有左边的值写到右边
data[left] = a # 把a归位
return left
def quick_sort(data, left, right):
if left < right:
mid = partition(data, left, right)
quick_sort(data, left, mid-1)
quick_sort(data, mid+1, right)
return data
data = [5, 2, 6, 1, 4, 9, 7, 8, 3]
print(quick_sort(data, 0, 8))
时间复杂度 O ( n log n ) O(n\log{n}) O(nlogn)