数据结构与算法--第五天
快速排序
思路:将列表中的第一个数设置成一个中间比较值,然后比它小的放左边,比它大的放右边,排序完成后,在将左边列表的第一个值设置成中间比较值,以及将右边列表的第一个值设置成中间比较值,然后继续进行排序,直到子列表只有一个数时,就排序完成
时间复杂度:快速排序的时间复杂度为:
最好情况 O(n) = nlog2 (n)
最坏情况 O(n) = n²
def quick_sort(alist, first, last):
# 当下面的递归调用到最后列表只剩下一个数时,就结束循环
if first >= last:
return
mid_value = alist[first]
low = first
high = last
# 执行一轮
# high 左移
while low < high and alist[high] >= mid_value:
high -= 1
alist[low] = alist[high]
# low 右移
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,3<