写点什么

如何实现迭代快速排序算法(iterative quicksort algorithm)?

作者:InfoQ IT百科
  • 2022 年 4 月 24 日
  • 本文字数:817 字

    阅读完需:约 3 分钟

如何实现迭代快速排序算法(iterative quicksort algorithm)?


如何实现迭代快速排序算法(iterative quicksort algorithm),其实很简单,可以参考以下代码:


from collections import deque  def swap (A, i, j):    temp = A[i]    A[i] = A[j]    A[j] = temp  def partition(a, start, end):     # 从列表中选择最右边的元素作为枢轴    pivot = a[end]     # 小于枢轴的元素将转到`pIndex`的左侧    # 大于枢轴的元素将移到`pIndex`的右侧    pIndex = start     # 每次我们找到一个小于或等于枢轴的元素时,    # `pIndex` 增加,并且该元素将被放枢纽的前面    for i in range(start, end):        if a[i] <= pivot:            swap(a, i, pIndex)            pIndex = pIndex + 1     # 用枢轴交换`pIndex`    swap(a, pIndex, end)     # return `pIndex`(枢轴元素的索引)    return pIndex  # 迭代快速排序过程def iterativeQuicksort(a):     # 创建用于存储子列表开始和结束索引的堆栈    stack = deque()     # 获取给定列表的开始和结束索引    start = 0    end = len(a) - 1     # 将数组的开始和结束索引压入堆栈    stack.append((start, end))     # 循环直到堆栈为空    while stack:         start, end = stack.pop()         # 根据枢纽,调整元素        pivot = partition(a, start, end)         # 将包含小于当前枢轴的元素的子列表索引入栈        if pivot - 1 > start:            stack.append((start, pivot - 1))         # 将包含比当前枢轴大的元素的子列表索引入栈        if pivot + 1 < end:            stack.append((pivot + 1, end))  # 快速排序的迭代方式测试if __name__ == '__main__':     test = [8, -2, 15, 7, 2, 8, -6, 1, 3]     iterativeQuicksort(test)     print(test)        # 结果:[-6, -2, 1, 2, 3, 7, 8, 8, 15]
复制代码


用户头像

还未添加个人签名 2021.04.12 加入

还未添加个人简介

评论

发布
暂无评论
如何实现迭代快速排序算法(iterative quicksort algorithm)?_InfoQ IT百科_InfoQ写作社区