每当找工作HR问你:学过数据结构吗,你知道时间复杂度吗,请写出来一个快速排序,场面是否非常尴尬。
def quick_sort(alist, start, end):
"""快速排序"""
if start >= end:
return
mid = alist[start]#保存列表的第一个元素
left = start #开始
right = end #结尾
# left与right未重合,就向中间移动
while left < right:#left小于right执行下面的操作
while left < right and alist[right] >= mid:#添加left小于right
right -= 1#right 向左移动
alist[left] = alist[right] #当left < right不成立时赋值元素添加left小于right
while left < right and alist[left] < mid:
left += 1#left向右边走
alist[right] = alist[left] #赋值
# 从循环退出后,left与right相遇,即left==right
alist[left] = mid
# 对左边部分执行快速排序
quick_sort(alist, start, left-1)#使用递归算法从start到left-1执行上面的操作
# 对右边部分执行快速排序
quick_sort(alist, left+1, end)
if __name__ == '__main__':
li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print(li)
quick_sort(li, 0, len(li)-1)
print(li)
快速排序的方法是 :先找一个数然后 从左边和右边同时比较 相遇是就是这个元素的位置
快速排序最优时间复杂度为o(n)legn 最坏的时间复杂度为o(n^n)
稳定性:不稳定