堆排序算法
2011-10-22 15:21
211 查看
#include <string.h> #include <stdio.h> void Swap(int * a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } void Heapify(int * a, int start, int end) { int index; if (2 * start + 2 <= end) { index = a[2 * start + 1] > a[2 * start + 2] ? (2 * start + 1) : (2 * start + 2); if (a[index] > a[start]) { Swap(a, index, start); Heapify(a, index, end); } } else if (2 * start + 1 == end) { if (a[2 * start + 1] == a[start]) { Swap(a, 2 * start + 1, start); } } } void HeapSort(int * a, int n) { int i; for (i = (n - 1) / 2; i >= 0; --i) { Heapify(a, i, n - 1); } for (i = n - 1; i >= 1; --i) { Swap(a, i, 0); Heapify(a, 0, i - 1); } } void Print(int * a, int n) { int i; for (i = 0; i < n; ++i) { printf("%3d", a[i]); } printf("\n"); } int main() { int a[10] = {1, 9, 8, 7, 3, 5, 6, 2, 0, 4}; Print(a, 10); HeapSort(a, 10); Print(a, 10); return 0; }
相关文章推荐
- C/C++中的 堆排序算法 STL
- 精通八大排序算法系列:二、堆排序算法
- 堆排序算法_2011_10_10
- 堆排序算法原理及JAVA实现
- 堆排序算法 总结
- 堆排序算法(C#实现)
- 堆排序算法的实现 (冒泡排序)
- 堆排序算法(java实现)
- 堆排序算法
- 堆排序算法的C语言和Python版本源码实现
- 八大种必知排序算法(三) 归并排序算法、堆排序算法详解 (续)
- 堆排序算法
- 图文详解Heap Sort堆排序算法及JavaScript的代码实现
- 插入排序和堆排序算法
- 堆排序算法的java实现
- Java 归并排序算法、堆排序算法实例详解
- 堆排序算法
- Python实现基于二叉树存储结构的堆排序算法示例
- 【算法】排序算法总结,手写快排,归并,堆排序算法
- 堆排序算法(c++实现)