算法入门(七)排序-(牛逼三人组)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)

  

posted @ 2021-01-18 11:11  traurig  阅读(87)  评论(0编辑  收藏  举报