def mergesort(arr):
if len(arr) <= 1:
return arr
res = [0] * len(arr)
stack = []
queue = [(0, len(arr) - 1)]
while queue:
i, j = queue.pop(0)
if i == j:
continue
mid = (i + j) // 2
queue.append((i, mid))
queue.append((mid + 1, j))
stack.append((i, mid, j))
while stack:
l, mid, r = stack.pop()
# merge arr[l:mid], arr[mid:r],两个数组各自是有序的
cur = 0
i = l
j = mid + 1
while i <= mid or j <= r:
if i > mid:
res[cur] = arr[j]
cur += 1
j += 1
elif j > r:
res[cur] = arr[i]
cur += 1
i += 1
elif arr[i] > arr[j]:
res[cur] = arr[j]
cur += 1
j += 1
else:
res[cur] = arr[i]
cur += 1
i += 1
for i in range(cur):
arr[i + l] = res[i]
return arr
【python】归并排序无递归实现(堆栈模拟)
最新推荐文章于 2022-11-27 10:22:01 发布
本文介绍了一种经典的排序算法——归并排序。通过递归将数组分成更小的部分,然后将这些部分合并为有序数组。文章详细展示了归并排序的具体实现过程。
&spm=1001.2101.3001.5002&articleId=127223210&d=1&t=3&u=1000ee6e51444f2b9ad7f83dc13d9ee3)
1434

被折叠的 条评论
为什么被折叠?



