如何实现迭代快速排序算法(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]复制代码
划线
评论
复制
发布于: 刚刚阅读数: 3
InfoQ IT百科
关注
还未添加个人签名 2021.04.12 加入
还未添加个人简介










评论