堆排序 C++实现
来源:互联网 发布:mcgs组态软件实例教程 编辑:程序博客网 时间:2024/06/08 23:44
//堆排序其实分为了三个函数 建堆,维护堆,排序。其中最基础的应该就是维护堆这个函数了#include <iostream>using namespace std;inline int left(int );inline int right(int );void maintainHeap(int *,int );void buildHeap(int *,int );void printfHeap(int *,int );void swap(int &,int &);void heapsort(int *arry,int length);static int heapsize=0;inline int left(int i) //设置为内联函数,加快执行速度{return 2*i;}inline int right(int i){return 2*i+1;}void maintainHeap(int *arry,int i) //维护堆的性质{int largest=0;int l=left(i);int r=right(i); if(l<=heapsize && arry[l]>arry[i]) largest=l; else largest=i; if(r<=heapsize && arry[r]>arry[largest]) largest=r; if (largest!=i) { swap(arry[largest],arry[i]); maintainHeap(arry,largest); //继续递归调用,可以改写成循环来做,提高程序的执行效率,有空在改写吧 }}void buildHeap(int *arry,int length){int i=0;i=length/2; //找到最后一个非叶节点while(i>=1) //向上开始维护堆的性质{ maintainHeap(arry,i); i--;}}void swap(int &a,int &b){int temp;temp=b;b=a;a=temp;}void printfHeap(int *arry,int length){for(int i=1;i<length;i++) cout<<arry[i]<<" "; cout<<endl;}void heapsort(int *arry,int length){buildHeap(arry,heapsize); //首先建堆length=heapsize;while(length>=2){ cout<<arry[1]<<" "; //输出堆顶最大的元素 swap(arry[1],arry[length--]); //将最大的元素与堆的最后一个节点交换 heapsize--; //此时堆的规模需要减1 maintainHeap(arry,1); //每次维护以根节点的堆}cout<<arry[length]; //输出最后一个元素}int main(){int a[11]={0,2,6,12,345,4,3,67,-1,9,21};heapsize=10;buildHeap(a,heapsize);printfHeap(a,heapsize);cout<<"--------------------------------------------------------"<<endl;heapsort(a,heapsize);return 0;}
阅读全文
0 0
- 堆排序的C实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序--C语言实现
- C语言实现堆排序
- 堆排序(c实现)
- 堆排序--C语言实现
- 堆排序C语言实现
- 堆排序的实现(c++)
- C实现heap堆排序
- c/c++实现堆排序
- 堆排序C语言实现
- C语言实现堆排序
- 堆排序c语言实现
- 堆排序-C语言实现
- 排序算法(C实现)--------- 堆排序
- TCP定时器
- 谈谈Fragment中的onActivityResult
- angular2中ngstyle和ngclass的用法
- c语言中,const double pi=acos(-1.0)是什么意思
- 进程和线程浅谈
- 堆排序 C++实现
- 算法导论 练习题 20.2-1
- maven项目驱动报错
- JSP中文乱码问题终极解决方案
- Spring的属性注入到bean实例的细节
- C#的类型转换
- ios开发 数字转汉字
- python学习笔记(一)
- 到底什么才是自动化巡检?