我的教授给了我们一些代码,以将heapsort实现到我们的排序类中,我似乎无法使其正常工作。每次我打印出来时,有些数字都会转换为0(或随机填充为1),并且不会排序。我知道这一点是因为我有一个fill函数,该函数只创建一个数字数组,该数字数组应按递增的顺序递增值。
def heapsort(self):
n = self.size # Doing this for simplicity
for k in range((n-2) // 2, -1, -1):
self.downheap(n, k)
for m in range(n - 1, 0, -1):
self.data[m], self.data[0] = self.data[0], self.data[m]
self.downheap(m, 0)
def downheap(self, n, k):
if n > 1:
key = self.data[k]
isHeap = False
while (k <= (n-2) // 2) and not isHeap:
j = 2 * k + 1
if j + 1 < n:
if self.data[j] < self.data[j + 1]:
j += 1
if key >= self.data[j]:
isHeap = True
else:
k = j
self.data[k] = key
未排序的列表看起来像-
17 19 8 8 9 3 17 13 9 1
14 19 15 12 19 4 12 6 1 8
13 8 10 5 6 6 9 17 6 5
12 5 7 16 9 10 11 3 10 14
5 3 12 1 3 10 18 10 4 19
5 10 14 9 16 8 3 14 4 13
12 8 13 10 16 17 16 10 11 3
16 9 3 16 15 3 2 11 15 3
3 3 18 7 9 6 10 4 1 4
15 10 9 1 2 18 14 11 4 3
“已排序”列表看起来像-
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 8 13
1 3 5 6 6 9 12 6 5 12
1 1 3 3 1 1 3 10 8 5
3 12 1 1 1 1 10 4 3 5
10 6 9 9 8 3 6 4 5 12
8 8 1 2 1 2 3 3 2 1
9 3 11 6 3 2 1 10 3 3
3 5 7 3 6 1 1 1 4 3
1 1 1 2 10 5 4 4 3 17
这是公司的工作。数字-
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
"Sorted"
0 0 3 4 0 0 7 8 9 10
11 12 0 0 15 16 17 18 19 20
21 22 23 24 25 26 27 28 0 0
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 24
51 25 12 5 55 27 13 28 59 29
0 0 63 31 15 32 67 33 16 7
71 35 17 36 75 37 3 8 79 39
19 40 83 41 20 9 87 43 21 44
91 45 4 1 95 47 23 48 11 0
最近几天我一直在倾倒,我知道我把所有事情都正确地写下来了,而且我一生无法弄清楚发生了什么。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:0)
想通了!
我不得不放- self.data [k] = self.data [j] 超过k = j