• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

python实现的堆排序算法代码

python 水墨上仙 1708次浏览

python实现的堆排序算法代码

def heapSort(a):  
    def sift(start, count):  
        root = start  
  
        while root * 2 + 1 < count:  
            child = root * 2 + 1  
            if child < count - 1 and a[child] < a[child + 1]:  
                child += 1  
            if a[root] < a[child]:  
                a[root], a[child] = a[child], a[root]  
                root = child  
            else:  
                return  
  
    count = len(a)  
    start = count / 2 - 1  
    end = count - 1  
  
    while start >= 0:  
        sift(start, count)  
        start -= 1  
  
    while end > 0:  
        a[end], a[0] = a[0], a[end]  
        sift(0, end)  
        end -= 1  
  
a = [-8,0,1,3,11,35,68]  
heapSort(a)  
print a # [-8, 0, 1, 3, 11, 35, 68] 

Recursive&nbspsift(and&nbspmore&nbspreadable&nbspIMHO)&nbspVersion:

def heapsort(a):  
  
    def swap(a,i,j):  
        tmp = a[i]  
        a[i] = a[j]  
        a[j] = tmp    
          
    def siftdown(a, i, size):  
        l = 2*i+1  
        r = 2*i+2  
        largest = i  
        if l <= size-1 and a[l] > a[i]:  
            largest = l  
        if r <= size-1 and a[r] > a[largest]:  
            largest = r  
        if largest != i:  
            swap(a, i, largest)  
            siftdown(a, largest, size)  
              
    def heapify(a, size):  
        p = (size/2)-1  
        while p>=0:  
            siftdown(a, p, size)  
            p -= 1  
              
    size = len(a)          
    heapify(a, size)  
    end = size-1  
    while(end > 0):  
        swap(a, 0, end)  
        siftdown(a, 0, end)  
        end -= 1  


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明python实现的堆排序算法代码
喜欢 (0)
加载中……