堆排序
2016-03-06 11:41
417 查看
最小堆为降序排列,最大堆为升序排列
#include <iostream> using namespace std; void MinHeapify(int* A, int parentIndex, int heapSize); void Swap(int* A, int lIndex, int rIndex); void BuildMinHeap(int* A, int len); void HeapSort(int* A, int len); int main () { int arr[] = {3,1,5,2,4,99,8,7}; int len = sizeof(arr)/sizeof(arr[0]); HeapSort(arr, len); for (int i = 0; i < len; ++i) { cout << arr[i] << "\t"; } cout << endl; return 0; } void MinHeapify(int* A, int parentIndex, int heapSize) { int leftChildIndex = 2*parentIndex+1; int rightChildIndex = leftChildIndex+1; int minIndex = parentIndex; if (leftChildIndex < heapSize && A[leftChildIndex] < A[parentIndex]) { minIndex = leftChildIndex; } if (rightChildIndex < heapSize && A[rightChildIndex] < A[minIndex]) { minIndex = rightChildIndex; } if (minIndex != parentIndex) { Swap(A, parentIndex, minIndex); MinHeapify(A, minIndex, heapSize); } } void Swap(int* A, int lIndex, int rIndex) { int tmp = A[lIndex]; A[lIndex] = A[rIndex]; A[rIndex] = tmp; } void BuildMinHeap(int* A, int len) { if (A == NULL || len < 1) { return; } for (int i = len/2; i >= 0; i--) { MinHeapify(A, i, len); } } void HeapSort(int* A, int len) { if (A == NULL || len < 1) { return; } BuildMinHeap(A, len); for (int i = len-1; i > 0; --i) { Swap(A, i, 0); MinHeapify(A,0,i); } }
相关文章推荐
- SQL over()用法
- 在使用EclispADT的时候怎么防止模拟器Time out小技巧
- 蓝桥杯 历届试题 分糖果 (简单模拟)
- 蓝桥杯生涯
- 为什么IBOutlet属性是weak的?
- python的简单介绍
- UVA 11992,。。。伪-二维线段树
- 15级周测题
- 【软件测试_hw1】记一次debug的经历
- System Operations on AWS - Lab 5W - Managing Resources (Windows)
- 设计模式-命令模式(Go语言描述)
- javascript高级程序设计笔记-第十一章(DOM扩展)
- 【uoj #35】后缀排序
- 笔记:batch normalization:accelerating deep network training by reducing internal covariate shift
- Android中Service(服务)详解
- POJ 1113
- PAT (Advanced Level) Practise 1032 Sharing (25)
- 音乐播放器中Service的使用
- 软件测试homework2
- javascript下兼容都有哪些