zoukankan      html  css  js  c++  java
  • 堆排序

    #__author__=lx
    #__date__=2011-09-29
    #__brief__=Heap_sort
    
    
    def left( i ):
            return 2*i
    
    def right( i ):
            return 2*i + 1
    
    def swap( a1, a2 ):
            return a2, a1
    
    def max_heap( A, i ):
    
            if i == 0:
                    return
    
            l = left( i )
            r = right( i )
            largest = i
    
            if l < len( A ):
                    if A[ l ] > A[ i ] :
                            largest = l
                    else:
                            largest = i
    
            if r < len( A ):
                    if A[ r ] > A[ largest ]:
                            largest = r
    
            if largest != i:
                    A[i], A[largest] = swap( A[i], A[largest] )
                    max_heap( A, largest )
    
            return A
    
    
    def build_max_heap( A ):
            i = len( A ) / 2
    
            while ( i >= 1 ):
                    max_heap( A, i )
                    i -= 1
    
    
    def heap_sort( A ):
            build_max_heap( A )
    
            i = len( A ) - 1
    
            while ( i >= 2 ):
                    A[1], A[i] = swap( A[1], A[i] )
                    print A[-1]
                    A = max_heap( A[ :-1 ], 1 )
                    i -= 1
    
            print A[-1]
    
    if __name__ == "__main__":
            d = [ 0, 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 ]
    
            heap_sort( d )
                                                      
    

      

  • 相关阅读:

    入门动态规划问题
    AC自动机
    KMP算法
    [OpenGL]用鼠标拖拽图形移动
    HDU-2222 Keywords Search
    Trie
    Manacher算法
    linux环境搭建
    Android Studio使用JNI和NDK进行开发
  • 原文地址:https://www.cnblogs.com/lxgeek/p/2195821.html
Copyright © 2011-2022 走看看