算法导论:堆排序
来源:互联网 发布:yum install CMake 编辑:程序博客网 时间:2024/06/05 02:01
堆排序
代码(python 2)只是实现了堆排序的核心代码:堆维护性质(max_heapify),而后的建堆、及排序都是基于堆得维护性质算法进行调用即可,暂时不做详解。
注意:
为了和书中的伪代码一致,对堆(以数组的形式表示)的操作从数组的第二个元素array[1]开始,第一个元素不作处理初始为0。
堆维护性质算法
1、基于递归实现:
"""warning: 1, This codes are based on chapter 6 of Introduction to Algorithms, so the array[0] to be initialized 0, and ignore array[0]. 2, The second element, array[1], will be treated as the root of the heap. 3, At beginning, the heap_size = len(array)-1 because we don't operate array[0]."""'''此时的Heap类暂时使用不到'''class Heap: def __init__(self, array, list_length, heap_size): self.A = array self.list_length = list_length self.heap_size = heap_size def heap_size_del(self): self.heap_size -= 1def left(i): return 2*idef right(i): return 2*i + 1def max_heapify_recursion(array, i, heap_size): if (i > heap_size/2) or (array[i] > array[left(i)] and array[i] > array[right(i)]): return largest = i if i <= heap_size / 2 and array[i] < array[left(i)]: largest = left(i) if i <= heap_size / 2 and array[largest] < array[right(i)]: largest = right(i) if largest != i: temp = array[i] array[i] = array[largest] array[largest] = temp max_heapify_recursion(array, largest, heap_size)
实验如下:
heap = [0, 16, 4, 10, 14, 7, 9, 3, 2, 8, 1]print heapmax_heapify_recursion(heap, 2, 10)print heap
结果:
[0, 16, 4, 10, 14, 7, 9, 3, 2, 8, 1][0, 16, 14, 10, 8, 7, 9, 3, 2, 4, 1]
2、非递归实现:
def max_heapify(array, i, heap_size): check = True if (i > heap_size/2) or (array[i] > array[left(i)] and array[i] > array[right(i)]): return while check: largest = i if (i > heap_size/2) or (array[i] > array[left(i)] and array[i] > array[right(i)]): break elif i <= heap_size/2 and array[i] < array[left(i)]: largest = left(i) elif i <= heap_size/2 and array[largest] < array[right(i)]: largest = right(i) if largest != i: temp = array[i] array[i] = array[largest] array[largest] = temp i = largest
实验相同略过。
阅读全文
0 0
- 算法导论 堆排序
- 算法导论--堆排序
- 【算法导论】 堆排序
- 算法导论-----堆排序
- 【算法导论】堆排序
- 算法导论-堆排序
- 堆排序--算法导论
- 算法导论:堆排序
- 算法导论:堆排序
- 【算法导论】堆排序
- 算法导论--堆排序
- 算法导论 堆排序
- 【算法导论】 堆排序
- 算法导论---堆排序
- 算法导论 堆排序
- 算法导论--堆排序
- 算法导论:堆排序
- [算法导论]堆排序
- 浅谈GC垃圾回收器
- STM32->UART
- C++关键字final与override
- 霍曼转移轨道仿真(平面内和平面外)
- 用链表实现杭电1276士兵队列训练问题
- 算法导论:堆排序
- opencv2.4.13+vs2013
- 39. OP-TEE中secure stroage------安全文件数据的打开过程(open)
- linux上安装免安装版MySQL5.7.18
- OGNL和Struts2中的值栈
- Qt实现TCP文件传输例子
- iTerm2的个人使用
- 属性计算
- 理解Java内存模型总结