堆排序
来源:互联网 发布:空军一号 国际歌 知乎 编辑:程序博客网 时间:2024/06/16 08:41
对于一个int数组,请编写一个堆排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
# 测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]
参考文档:堆排序
http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html
我的提交
# -*- coding:utf-8 -*-class HeapSort: def heapAdjust(self,A, i, n): if i >= n // 2: return max = i left = 2 * i right = left + 1 if max <= n // 2: if left < n and A[left] > A[max]: max = left if right < n and A[right] > A[max]: max = right if max != i: A[max],A[i] = A[i],A[max] self.heapAdjust(A, max, n) def heapBuild(self, A, n): for i in range(int(n // 2))[::-1]: self.heapAdjust(A, i, n) def heapSort(self, A, n): # write code here self.heapBuild(A, n) for i in range(n)[::-1]: A[0],A[i] = A[i],A[0] self.heapAdjust(A, 0, i) return Aif __name__ == '__main__': hs = HeapSort() print(hs.heapSort([32,103,24,88,95,70,97,15,102,6,79,46,51,37,93,108,9,58,53,58,79,36,58,91,78,58,61,81],28))
参考答案
# -*- coding:utf-8 -*-class HeapSort: def heapSort(self, A, n): # write code here for i in range(n/2+1, -1, -1): self.MaxHeapFixDown(A, i, n); for i in range(n-1, -1, -1): A[0], A[i] = A[i], A[0] self.MaxHeapFixDown(A, 0, i) return A def MaxHeapFixDown(self, A, i, n): tmp = A[i] j = 2*i+1 while(j<n): if j+1<n and A[j+1] > A[j]: j+=1 if A[j] < tmp: break A[i] = A[j] i = j j = 2*i+1 A[i] = tmp
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- DrawLayout
- 技术的正宗与野路子
- IT行业offer分析
- 双倍回文
- C++ const总结
- 堆排序
- [kuangbin带你飞]专题十六 KMP & 扩展KMP
- 访问private函数的方法
- makefile 中 $@ $^ %< 使用
- 数据结构与算法导读
- 微信公众平台的配置步骤
- 纯C实现的一套low b 贪吃蛇(娱乐版)
- 问题记录(Hessian)
- 數據庫配置文件