堆排序
2016-05-02 23:51
330 查看
#include <iostream> #include<algorithm> using namespace std; //堆排序 class HeapSort { public: int* heapSort(int* A, int n) { int *B = new int ; for (int i = n / 2 - 1; i >= 0; --i){ HeadFixDown(A, i, n - 1); } //a[]={3,7,8,20,17,16}; for (int i = 0; i<n; ++i){ B[i] = A[0]; swap(A[0], A[n - 1 - i]); HeadFixDown(A, 0, n - 1 - i - 1); } for (int i = 0; i<n; ++i){ A[i] = B[i]; } delete[] B; return A; } /*第i次循环结果 i=0:a[]={7,16,8,20,17,3} i=1:a[]={8,16,17,20,7,3} i=2:a[]={16,20,17,8,7,3} i=3:a[]={17,20,16,8,7,3} i=4:a[]={20,17,16,8,7,3} i=5:a[]={20,17,16,8,7,3} */ void HeadFixDown(int* A, int i, int n){ int j, temp; j = i * 2 + 1; temp = A[i]; while (j <= n){ if (j + 1 <= n && A[j + 1]<A[j]) j += 1; if (A[j] >= temp) break; A[i] = A[j]; i = j; j = i * 2 + 1; } A[i] = temp; } void swap(int& a, int &b){ int temp = a; a = b; b = temp; } }; int main(int argc, char *argv[]) { int a[]={16,7,3,20,17,8}; int size; HeapSort* hs = new HeapSort(); hs->heapSort(a,5); int i; for (i = 0; i < 5; i++) cout << a[i] << " "; cout << endl; system("pause"); return 0; }
相关文章推荐
- 《Java程序设计》第9周学习总结
- ipad停用恢复
- [BZOJ1345][Baltic2007]序列问题Sequence(单调栈)
- 类Unix系统下两大程序员神器spf13-vim oh-my-zsh
- Ubuntu 16.04笔记本插入电源自动调节亮度
- todomvp 谷歌的MVP实例
- 聊聊IO多路复用之select、poll、epoll详解
- nginx 的基本配置
- 实验7 BindService模拟通信
- 冲刺第九天
- C++面向对象实验(四)
- 《Java程序设计》实验4
- WebService处理Map
- Docker 快速入门教程
- mysql 正则表达式的匹配
- Apache Maven项目提供的JAR插件详解
- Eclipse的插件EGIT使用教程
- C++ 面向对象实验(三)
- Python开源爬虫框架:Scrapy架构分析
- 数据库期中考试题库