python 快速排序

快速排序步骤为:

实例一:

def partition(arr,low,high):
    i = low -1 #最小元素索引
    pivot = arr[high]
    for j in range(low,high):
        # 当前元素最小或等于pivot
        if arr[j] <= pivot:
            i = i+1
            arr[i],arr[j] = arr[j],arr[i]
    arr[i+1],arr[high] = arr[high],arr[i+1]
    return i+1

# arr[] --> 排序数组
# low --> 起始数组
#high --> 结束数组

# 快速排序函数
def quickSort(arr,low,high):
    if low < high:
        pi = partition(arr,low,high)
        quickSort(arr, low, pi-1)
        quickSort(arr, pi+1, high)

arr = [11,99,33,69,77,88,55,11,33,36,39,66,44,22]
n = len(arr)
quickSort(arr,0,n-1)
print("排序后的数组:")
for i in range(n):
    print("%d" % arr[i])

输出结果

排序后的数组:
11
11
22
33
33
36
39
44
55
66
69
77
88
99

实例二:

def quick_sort(arr):
    """ 快速排序 """
    if len(arr) < 2:
        return arr
    #选取基准,随便哪一个都可以,选中间的便于理解
    mid = arr[len(arr)//2]
    #定义基准左右两个数列
    left, right = [], []
    #从原始数组中移除基准值
    arr.remove(mid)
    for item in arr:
        #大于基准值放右边
        if item >= mid:
            right.append(item)
        else:
            #小于基准值放左边
            left.append(item)
    #使用迭代进行比较
    return quick_sort(left) + [mid] + quick_sort(right)

l= [11,99,33,69,77,88,55,11,33,36,39,66,44,22]
quick_sort(l)

输出结果:

[11, 11, 22, 33, 33, 36, 39, 44, 55, 66, 69, 77, 88, 99]