Python解决快速排序
递归
def partition_v2(start_index, end_index, array=None):
# 取第一个位置的元素作为基准元素(也可以选择随机位置)
if array is None:
array = []
pivot = array[start_index]
mark = start_index
for i in range(start_index + 1, end_index + 1):
if array[i] < pivot:
mark += 1
array[mark], array[i] = array[i], array[mark]
array[start_index] = array[mark]
array[mark] = pivot
return mark
def quick_sort(start_index, end_index, array=None):
# 递归结束条件:startIndex大等于endIndex的时候
if array is None:
array = []
if start_index >= end_index:
return
# 得到基准元素位置
pivot_index = partition_v2(start_index, end_index, array)
# 根据基准元素,分成两部分递归排序
quick_sort(start_index, pivot_index - 1, array)
quick_sort(pivot_index + 1, end_index, array)
if __name__ == '__main__':
my_array = list([3, 4, 14, 1, 5, 6, 7, 8, 1, -1, 0, 9, 11])
quick_sort(0, len(my_array) - 1, my_array)
print(my_array)
栈
def partition(start_index, end_index, array=None):
# 取第一个位置的元素作为基准元素(也可以选择随机位置)
if array is None:
array = []
pivot = array[start_index]
mark = start_index
for i in range(start_index + 1, end_index + 1):
if array[i] < pivot:
mark += 1
p = array[mark]
array[mark] = array[i]
array[i] = p
array[start_index] = array[mark]
array[mark] = pivot
return mark
def quick_sort(start_index, end_index, array=None):
# 用一个集合栈来代替递归的函数栈
if array is None:
array = []
quick_sort_stack = []
# 整个数列的起止下标,以哈希的形式入栈
root_param = {"startIndex": start_index, "endIndex": end_index}
quick_sort_stack.append(root_param)
# 循环结束条件:栈为空时结束
while len(quick_sort_stack) > 0:
# 栈顶元素出栈,得到起止下标
param = quick_sort_stack.pop()
# 得到基准元素位置
pivot_index = partition(param.get("startIndex"), param.get("endIndex"), array)
# 根据基准元素分成两部分, 把每一部分的起止下标入栈
if param.get("startIndex") < pivot_index - 1:
left_param = {"startIndex": param.get("startIndex"), "endIndex": pivot_index - 1}
quick_sort_stack.append(left_param)
if pivot_index + 1 < param.get("endIndex"):
right_param = {"startIndex": pivot_index + 1, "endIndex": param.get("endIndex")}
quick_sort_stack.append(right_param)
if __name__ == '__main__':
my_array = list([3, 4, 14, 1, 5, 6, 7, 8, 1, -1, 0, 9, 11])
quick_sort(0, len(my_array) - 1, my_array)
print(my_array)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix