堆排序实现
来源:互联网 发布:中国象棋人机对战软件 编辑:程序博客网 时间:2024/05/17 08:57
今天抽空写了个堆排序的算法,废话不多说,直接上源代码:
#include<iostream>#include<algorithm>#include<functional>using namespace std;#define MAXSIZE 6void print(int a[],int size = MAXSIZE){ int i;for(i=0;i<size;i++)cout<<a[i]<<" ";cout<<endl;}void percolate_down(int a[],int size,int i){int pre,max,lchild,rchild;if(size<=1||i<0||i>size-1) return ;pre=max=i;while(max<size/2){pre=max;lchild = max*2+1;rchild = max*2+2;if(lchild<size&&a[lchild]>a[max]) max = lchild;if(rchild<size&&a[rchild]>a[max]) max = rchild; if(max!=pre)swap(a[max],a[pre]);else break;}}void percolate_up(int a[],int size,int i){ int pre,min,parent;if(size<=1||i<0||i>size-1) return ;pre=min=i;while(min>0){pre=min;parent = (min-1)/2;if(parent>=0&&a[parent]<a[min]) min = parent; if(min!=pre)swap(a[min],a[pre]);else break;}}void pop_heap(int a[],int size){if(size<1) return;int value = a[0];swap(a[0],a[size-1]);percolate_down(a,size-1,0);}void push_heap(int a[],int size){ if(size<1) return; percolate_up(a,size,size-1);}void make_heap(int a[], int size){ int i; for(i=size/2;i>=0;i--) percolate_down(a,size,i);}void sort_heap(int a[], int size){ for(int i=size;i>0;i--) pop_heap(a,i);}int main(){ int a[MAXSIZE+10]={1,4,5,8,12,14};make_heap(a,MAXSIZE); print(a,MAXSIZE);//sort_heap(a,MAXSIZE); // print(a,MAXSIZE);//a[MAXSIZE] = 3;//push_heap(a,MAXSIZE+1);//print(a,MAXSIZE+1);//sort_heap(a,MAXSIZE+1);//print(a,MAXSIZE+1);for(int i=MAXSIZE;i>0;i--){ cout<<a[0]<<" "; pop_heap(a,i);}cout<<endl;system("pause");return 1;}
- 【排序】堆排序实现
- 用堆实现堆排序
- Python实现 [堆] [堆排序]
- 最大堆实现堆排序
- 堆以及堆排序实现
- 堆实现 及 堆排序
- 最大堆实现堆排序
- 堆排序的实现
- 堆排序的实现
- 堆排序实现...
- 堆排序的实现
- 堆排序实现
- 堆排序算法实现
- 堆排序的实现
- 堆排序实现
- 堆排序----c++实现
- 堆排序C++实现
- 堆排序的实现
- NO.2 C++的cout高阶格式化操作<转载>
- android4.0.3 添加Ethernet
- 输入一串字符,分别输出字母 数字 符号的个数,以$结束
- 关于用malloc函数申请0字节内存的进一步讨论——《C语言深度解剖》笔记
- Office 2007无法卸载也无法安装的解决
- 堆排序实现
- mva2 tests && mpiP
- TS 流解码过程
- C#目录与文件总结
- 1000以内的阿姆斯特朗数
- MyEclipse中复制项目注意点
- 4.2.2 堆分配存储结构
- grub4dos 引导PE UBUNTU 修复引导丢失问题
- UIView animateWithDuration 使用详解(实现动画效果)