C++实现的堆排序
2014-05-26 22:03
260 查看
要求:用一维数组建堆,然后堆排序。
输入:10
1 3 4 6 5 2 10 8 9 7
输出:1 2 3 4 5 6 7 8 9 10
输入:10
1 3 4 6 5 2 10 8 9 7
输出:1 2 3 4 5 6 7 8 9 10
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int da[100]; bool cmp(int a,int b){return a<b;} void heapadjust(int s[],int i,int size,bool compare(int,int)) { int lchild=i<<1; int rchild=i<<1|1; int mmax=i; if(i<=size/2) { if(lchild<=size&&compare(s[mmax],s[lchild]))mmax=lchild; if(rchild<=size&&compare(s[mmax],s[rchild]))mmax=rchild; if(mmax!=i) { swap(s[i],s[mmax]); heapadjust(s,mmax,size,compare); } } } void heapsort(int *s,int size,bool compare(int,int))//堆排序 { s--; for(int i=size/2;i>=1;i--) heapadjust(s,i,size,compare); for(int i=size;i>1;i--) { swap(s[1],s[i]); heapadjust(s,1,i-1,compare); } } int main() { //freopen("123.txt","r",stdin); int n,i; while(cin>>n) { for(i=0;i<n;i++) scanf("%d",&da[i]); heapsort(da,n,cmp);//参数(数组首地址,个数,比较函数) for(i=0;i<n;i++) printf("%d ",da[i]); } return 0; }
相关文章推荐
- 堆排序(C++模版技术实现)
- 排序法系列之六---堆排序(C++代码实现)
- 编程导论中 堆排序 C++实现
- c++手动和STL实现堆排序
- 排序算法(2) 堆排序 C++实现
- 选择排序——简单选择排序和堆排序,C++代码实现
- 算法学习 - 堆排序 ( HeapSort ) C++实现
- 堆排序-c++实现,节点变动则递归子树调整状态
- 算法思路重新实现-堆排序 中的 C++ & Java
- 几种排序算法的C++实现——快速排序、堆排序、基数排序
- C++实现堆排序
- 堆排序 c/c++实现
- LinuxC/C++编程基础(6) 堆排序的实现
- c++堆排序实现(heapsort) (算法导论)
- 堆排序的C++实现
- 堆、堆排序、优先级队列(c++实现)
- c++实现堆排序
- C++ 堆排序实现
- 堆排序实现_c++
- 算法设计之,堆,堆排序,基于最大堆的最大优先队列的实现(C++实现)