python实现的堆排序算法代码
发布时间:2020-12-17 17:16:34 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 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
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 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,1,3,11,35,68] heapSort(a) print a # [-8,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,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,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,end) siftdown(a,end) end -= 1 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |