数据结构-堆排序
2014-04-26 18:33
225 查看
#include <iostream> using namespace std; void Sort(int* a,int num,int n){ int c = 2 * num + 1; while(c+1 < n){ if(a[c+1] > a[c]){ c++; } if(a[c] > a[num]){ int tmp = a[c]; a[c] = a[num]; a[num] = tmp; num = c; c = 2 * num + 1; } else{ break; } } if(c+1 == n){ if(a[c]>a[num]){ int tmp = a[c]; a[c] = a[num]; a[num] = tmp; } } } void CreateHeap(int* a,int n){ int t = (n-1) / 2; //最后一个非叶子点 for(int i=t;i>=0;i--){ Sort(a,i,n); } } void HeapSort(int* a,int n){ for(int i=n-1;i>=0;i--){ int tmp = a[i]; a[i] = a[0]; a[0] = tmp; Sort(a,0,i); //因为把0和最后的元素交换,所以每次都只需要从0开始构建heap } } int main() { int a[] = {5,2,8,7,4,1,6,9,3,10}; int n = 10; CreateHeap(a,n); HeapSort(a,n); for(int i=0;i<n;i++){ cout << a[i] << " "; } return 0; }
相关文章推荐
- 【数据结构-堆排序】堆排序 Heap Sort
- 我---对‘数据结构’中‘排序’的理解 ---------3:选择排序--(二)堆排序
- 要开始准备找工作了,昨天闲时就自己写了个数据结构排序类,包括了堆排序,归并排序,速度排序,插入排序。
- C++数据结构--堆排序
- 数据结构排序问题---堆排序及各种排序时间空间复杂度
- 数据结构与算是:C++实现堆排序
- 【数据结构】排序算法:希尔、归并、快速、堆排序
- 浅谈算法和数据结构: 五 优先级队列与堆排序
- 【数据结构】堆排序
- C++代码,数据结构-内部排序-选择排序-堆排序
- 数据结构示例——堆排序过程
- 重学数据结构系列之——堆及堆排序
- 数据结构--堆排序
- 【数据结构】将一组数据升序排序(利用堆排序)
- 【数据结构学习】-堆与堆排序
- 数据结构 - 堆排序(heap sort) 具体解释 及 代码(C++)
- 数据结构:堆排序
- [golang] 数据结构-堆排序
- 【算法与数据结构专场】堆排序是什么鬼?
- 数据结构 — 堆排序