我正在尝试实现三元堆排序,堆的每个父级都有 3 个子级,但是我无法让我的代码返回排序列表。我想我可能在某处犯了一个逻辑错误但无法发现它,任何修复此代码的帮助将不胜感激。
def swap(i, j):
sqc[i], sqc[j] = sqc[j], sqc[i]
def heapify(end,i):
l=3 * (i + 1)
m=3 * (i + 2)
r=3 * (i + 3)
max=i
if l < end and sqc[i] < sqc[l]:
max = l
if r < end and sqc[max] < sqc[r]:
max = r
if m < end and sqc[max] < sqc[m]:
max = m
if max != i:
swap(i, max)
heapify(end, max)
def heap_sort():
end = len(sqc)
start = end / 2 - 1
for i in range(start, -1, -1):
heapify(end, i)
for i in range(end-1, 0, -1):
swap(i, 0)
heapify(i, 0)
sqc = [2, 7, 1, -2, 56, 5, 3]
heap_sort()
print(sqc)
[7, 1, -2, 56, 5, 2, 3]
是返回的,完全乱序。