快速排序

def quick_sort(alist):
    """
    快速排序(封装一层)
    :param alist: 待排序列表
    :return:
    """
    return _q_sort(alist, 0, len(alist)-1)


def _q_sort(alist, left, right):
    """
    递归实现
    :param alist: 列表
    :param left: 左边下标
    :param right: 右边下标
    :return:
    """
    if left < right:
        pivot = _partition2(alist, left, right)
        _q_sort(alist, left, pivot-1)
        _q_sort(alist, pivot+1, right)

# 第一种实现
def _partition(alist, left, right):
    """
    找到分开列表的基准
    """
    pivotion = alist[left]
    while left < right:
        while left < right and pivotion <= alist[right]:
            right -= 1
        if left < right:
            alist[left], alist[right] = alist[right], alist[left]
        while left < right and pivotion > alist[left]:
            left += 1
        if left < right:
            alist[left], alist[right] = alist[right], alist[left]

    return left


# 第二种实现
def _partition2(alist, left, right):
    pivotion = alist[left]
    while left < right:
        while left < right and alist[right] >= pivotion:
            right -= 1
        while left < right and alist[right] < pivotion:
            alist[left] = alist[right]
            left += 1
            alist[right] = alist[left]
    alist[left] = pivotion
    return left

找列表的基准的两种方法实现:

1、双指针(两边同时)

2、单指针(从后往前)

posted @ 2019-06-08 14:13  -山水之间-  阅读(65)  评论(0)    收藏  举报