python-3.x - python(就地)合并排序实现
问题描述
我正在尝试实现合并排序,以便对列表进行就地排序:
from typing import List, Tuple
def merge_sort(tab: List[int], low:int, end:int) -> None:
if end > low + 1:
mid = (low + end) // 2
merge_sort(tab, low, mid)
merge_sort(tab, mid, end)
# merging the two sorted halves
i, j, k = low, mid, low
while (i < mid) and (j < end):
if tab[i] < tab[j]:
tab[k] = tab[i]
i = i + 1
else:
tab[k] = tab[j]
j = j + 1
k = k + 1
while (i < mid):
tab[k] = tab[i]
i = i + 1
k = k + 1
while (j < end):
tab[k] = tab[j]
j = j + 1
k = k + 1
很遗憾:
tab = [54, 26, 93, 17, 77, 31, 44, 55, 20]
merge_sort(tab, 0, len(tab))
将选项卡转换为:
[17, 17, 17, 17, 20, 20, 20, 20, 20]
谁能帮我理解我做错了什么?
解决方案
推荐阅读
- python - why is id([1][::-1]) ==id([1]) returning True while [1][::-1] is [1] returning False?
- swift - 使用 MKMapSnapshotter 创建可点击的地图预览
- pandas - 当列中有重复值时,如何根据索引分配列?
- python - 如何在 selenium python 中抓取突出显示的表数据
- sql - 两列中的 SQL 顺序
- google-apps-script - 在谷歌脚本上,有没有办法向单个用户显示消息或提示?
- r - 在另一个变量的值在该日期达到最大值/最小值的日期之后使用拆分数据框
- date - avro 架构 LocalDate 映射
- javascript - 如何在 CSS 中自动调整跨度圆的大小
- java - 在 Java 中声明 ConcurrentHashMap 时是否必须添加 final 关键字