Python堆排序将数字更改为0,而不是对其进行排序

时间:2019-02-11 21:50:56

标签: python

我的教授给了我们一些代码,以将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 

最近几天我一直在倾倒,我知道我把所有事情都正确地写下来了,而且我一生无法弄清楚发生了什么。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

想通了!

我不得不放- self.data [k] = self.data [j] 超过k = j