排序算法之堆排序
2015-01-06 21:57
267 查看
堆排序的算法如下:
#include <iostream> using namespace std; void AdjustHeap(int a[], int begin, int end, int pos) { int lchild = 2 * pos - begin + 1; int rchild = 2 * pos - begin + 2; int TracePos = -1; if(lchild > end) return; if(rchild <= end) a[lchild] > a[rchild]? TracePos = lchild : TracePos = rchild; else if(lchild <= end) TracePos = lchild; if(a[pos] < a[TracePos]) { swap(a[pos], a[TracePos]); AdjustHeap(a, begin, end, TracePos); } } void HeapSort(int a[], int begin, int end) { int len = end - begin + 1; for(int i = begin + (len / 2 - 1); i >= begin; --i) AdjustHeap(a, begin, end, i); for(int i = end; i >= begin; --i) { AdjustHeap(a, begin, i, begin); swap(a[begin], a[i]); } } int main() { int a[] = {2334, 12112121, 1212, 45, 45, 12, 34343}; //int a[] = {}; int len = sizeof(a)/sizeof(int); random_shuffle(a, a + len); HeapSort(a, 0, len - 1); for(int i = 0; i < len; ++i) cout<< a[i] << " "; }
相关文章推荐
- 漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析
- 排序算法-快速排序和堆排序
- 经典排序算法学习笔记七——堆排序
- 【排序】用Python实现八大排序算法--堆排序
- 堆排序----(排序算法六)
- 排序算法(六):堆排序
- 排序算法之堆排序
- 对常见排序算法的总结(选择、插入、希尔、归并、快速、堆排序)
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
- 经典排序算法2-堆排序及优先队列
- 排序算法——堆排序
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 排序算法总结之堆排序
- 排序算法04:堆排序
- 【数据结构】排序算法:希尔、归并、快速、堆排序
- 排序算法之堆排序
- 排序算法——堆排序
- 排序算法之二 堆排序
- 排序算法_3,堆排序2
- 排序算法(3)—优先队列,堆排序