快速排序 - 非递归

arr = [4, 3, 2, 1, -1, 99, 12, 33, 99, 10]

print(arr)


def partition(arr: list, low: int, high: int, pivot: int):
    while low <= high:
        while arr[low] < pivot:
            low = low + 1

        while arr[high] > pivot:
            high = high - 1

        if low <= high:
            arr[low], arr[high] = arr[high], arr[low]
            low = low + 1
            high = high - 1

    return low


def quicksort(arr: list, low: int, high: int):
    stack = []

    stack.append(low)
    stack.append(high)

    while len(stack) > 0:
        h = stack.pop()
        l = stack.pop()

        if l >= h:
            continue

        pivot = arr[l]  # use first value as pivot

        p = partition(arr, l, h, pivot)

        if l < p:
            stack.append(l)
            stack.append(p - 1)

        if h > p:
            stack.append(p)
            stack.append(h)


quicksort(arr, 0, len(arr) - 1)


print(arr)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容