算法原理
快速排序是一种分而治之思想在排序算法上的应用。它从序列中挑出一个元素作为基准值,然后以此基准,左边元素均比它小,右边均比它大,这样形成了左右两个子序列,再分别使用快速排序,以此类推。原理图如下:
时间复杂度
最优时间复杂度:O(nlogn), 最坏时间复杂度O(n^2)
算法步骤
- 从序列中挑出一个元素作为基准元素。
- 重新排序序列,元素比基准值小的摆放在基准前面,元素比基准值大的摆在基准的后面,在这个分区操作完成后,基准值处于序列的中间位置。
- 递归地把小于基准值元素的子序列和大于基准值元素的子序列排序。
算法实现
def quick_sort(alist,first,last):
"""快速排序"""
if first >= last:
return
mid_value = alist[first]
low = first
high = last
while low < high:
# high 左移
while low < high and alist[high] >= mid_value:
high -= 1
alist[low] = alist[high]
while low < high and alist[low] < mid_value:
low += 1
alist[high] = alist[low]
# 从循环退出时,low == high
alist[low] = mid_value
# 对low左边的列表执行快速排序
quick_sort(alist,first,low-1)
# 对low右边的列表排序
quick_sort(alist,low+1, last)
if __name__ == "__main__":
li = [1,3,14,23,54,6,31,55,20]
quick_sort(li,0,len(li)-1)
print(li)