Python代码实现快速排序

# 输入一个列表,左端和右端,返回tmp在这段列表中的顺序位置,
# 并且小于tmp的都在tmp左边,大于tmp的都在tmp右边,
def partition(li, left, right):
    # 可以将任意位置的值归位,为了方便我们选择左端的值
    tmp = li[left]
    # 当left等于right的时候说明已经遍历完了,
    # left指针和right指针重合,且指向的正是tmp的位置
    while left < right:
        # 先从右端找一个比tmp小的值,放到tmp的位置上,空出自己的位置
        # left<right是先决条件,保证left和right不交叉,
        # 并遍历查找比tmp小的值
        while left < right and li[right] >= tmp:
            # 不满足条件左移一格
            right -= 1
        # 满足条件,将右指针的值赋给左指针指向的空位
        li[left] = li[right]
        # 保证不交叉,遍历查找比tmp大的值
        while left < right and li[left] <= tmp:
            # 不满足条件右移一格
            left += 1
        # 满足条件,将左指针的值赋给右指针指向的空位
        li[right] = li[left]
    # 循环结束,left和right重合,指向的就是tmp的有序的位置
    li[left] = tmp
    return left


def quick_sort(li, left, right):
    # 至少有两个元素
    if left < right:
        mid = partition(li, left, right)
        quick_sort(li, left, mid-1)
        quick_sort(li, mid+1, right)

# 整个排序过程都是对原列表进行赋值操作,没有开辟新的空间存储列表

 

posted @ 2019-03-18 21:13  铁公爵  阅读(399)  评论(0)    收藏  举报