算法入门(七)排序-(牛逼三人组)quick_sort
def partition(li, left, right):
"""
取出列表最左边的点作为基点,
从列表右边开始遍历列表,如果li[right]>= tmp不成立, 此时li[right] < tmp,将li[right] 赋值给li[left] ,依次循环
"""
tmp = li[left] while left < right: while left < right and li[right] >= tmp: # 从右边开始找比tmp小的书 right -= 1 # 往左边走一步 li[left] = li[right] # 把右边的值写到左边空位上 while left < right and li[left] <= tmp: left += 1 li[right] = li[left] # 把左边的值写到右边空位上 li[left] = tmp # 把tmp归位 return left # 反回 中点位置 def quick_sort(li, left, right):
"""
O(nlogn)
快排三步骤:
1.确定一个点(中点),把列表分为比基点大的数和小的数,放到基点两侧
2.把基点左边的列表循环1步骤,直到 left<right不成立, 即拆分的列表长度为1,此时递归结束
3.把基点右边的列表循环1步骤,直到 left<right不成立, 即拆分的列表长度为1,此时递归结束
"""
if left < right: # 至少为两个元素 mid = partition(li, left, right) quick_sort(li, left, mid-1) quick_sort(li, mid+1, right)