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-17 20:54:38 发布