2017-06-01 89 views
-2

我一直在寻找并尝试这么多,但无法弄清楚如何使用Heapsort按降序对List进行排序。而且我想用打印命令记录我的计算,以便理解计算路径。这是我的代码工作:Python中按堆栈降序排列

def swap(a, i, j): 
    a[i], a[j] = a[j], a[i] 

def is_heap(a): 
    n = 0 
    m = 0 
    while True: 
     for i in [0, 1]: 
      m += 1 
      if m >= len(a): 
       return True 
      if a[m] > a[n]: 
       return False 
     n += 1 

def sift_down(a, n, max): 
    while True: 
     biggest = n 
     c1 = 2*n + 1 
     c2 = c1 + 1 
     for c in [c1, c2]: 
      if c < max and a[c] > a[biggest]: 
       biggest = c 
     if biggest == n: 
      return 
     swap(a, n, biggest) 
     n = biggest 

def heapify(a): 
    i = len(a)/2 - 1 
    max = len(a) 
    while i >= 0: 
     sift_down(a, i, max) 
     i -= 1 

def sortHeapDesc(a): 

    heapify(a) 
    j = len(a) - 1 
    while j > 0: 
     swap(a, 0, j) 
     sift_down(a, 0, j) 
     j -= 1 
    return a 

liste = [3, 2, 1, 9, 17, 4, -1, 0] 
heapResult= sortHeapDesc(liste) 
print (heapResult) 

而且我需要的就是这样的结果是:17,9,4,3,2,1,0,-1]

+0

是不是有没有使用Python文档中提供的'heapsort'的原因? –

+0

@DmitryPolonskiy是的,我需要实现它的大学:)其作业考虑我的考试 –

回答

0

我sortHeapDesc功能是有点不同,但排序desc:

for i in range(start-1, 0, -1): # start -1 1 
    heapify(b, v, i) 

for i in range(v, -1, 1): # v-1 0 -1 
    chg(b, i, 0) 
    heapify(b, i, 0) 

看看两个for-rows。该评论是针对asc并且进入目前正在执行的desc范围内。如果你愿意,我可以给你我完整的代码。

问候。

+0

谢谢@Arne,但我有一个解决方案,它是在线变化2 < into > –