| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
mxw8
10年前发布

python实现的堆排序算法代码

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 sift(and more readable IMHO) Version:
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