快速排序算法的两种实现

2019-08-16  本文已影响0人  愤愤的有痣青年

# 在当前数组上排序
def quick_sort(number, i, j):
    if i >= j:
        return

    k1, k2 = i, j
    n = number[i]
    while i < j:
        while i < j and number[j] >= n:
            j -= 1

        number[i] = number[j]

        while i < j and n >= number[i]:
            i += 1

        number[j] = number[i]

    number[j] = n
    quick_sort(number, k1, i-1)
    quick_sort(number, i + 1, k2)

# 不改变原数组使用新数组排序
def quick_sort2(s):
    if len(s) <= 1:
        return s
    n = s[0]
    left, right = [], []
    for i in s[1:]:
        left.append(i) if i < n else right.append(i)

    return quick_sort2(left) + [n] + quick_sort2(right)


s = [1, 45, 3, 889, 343, 12, 34, 5, 654, 243]


# quick_sort(s, 0, len(s) - 1)
s = quick_sort2(s)
print(s)

上一篇 下一篇

猜你喜欢

热点阅读