算法4(NB三人组之快速排序)

快速排序

快排思路

  取一个元素p(第一个元素),使元素p归位;
  列表被p分成两部分,左边都比p小,右边都比p大;
  递归完成排序。

 代码示例

def quick_sort(data, left, right):
    """
    快速排序
    :param data: 无序列表
    :param left: 下标最小值
    :param right: 下标最大值
    :return:
    """
    if left < right:
        mid = partition(data, left, right)
        quick_sort(data, left, mid - 1)
        quick_sort(data, mid + 1, right)


def partition(data, left, right):
    """
    partition核心函数
    :param data: 无序列表
    :param left: 下标最小值
    :param right: 下标最大值
    :return: 有序原列表
    """
    tmp = data[left]
    while left < right:
        # 从右边找比tmp小的数
        while left < right and data[right] >= tmp:
            right -= 1
        data[left] = data[right]
        # 从左边找比tmp大的数
        while left < right and data[left] <= tmp:
            left += 1
        data[right] = data[left]
    data[left] = tmp
    return left


li = [1, 3, 2, 4, 5, 7, 6, 8, 9, 0]
quick_sort(li, 0, len(li) - 1)
print(li)

 

posted @ 2018-07-17 13:09  争-渡  阅读(106)  评论(0)    收藏  举报