如何实现迭代快速排序算法(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 加入
还未添加个人简介
评论