HDU 1425 sort(堆排序)
2012-07-21 11:06
211 查看
题目链接
今天学习排序,冒泡和选择,无视了。。。直接上堆排序。。
今天学习排序,冒泡和选择,无视了。。。直接上堆排序。。
#include <stdio.h> #include <string.h> #define N 1000001 int p ,n,m; void heapjust(int x,int len) { int i,num; num = p[x]; for(i = x*2;i <= len;i *= 2)//二叉树的左儿子是2*x右儿子是2*x+1 { if(i < len&&p[i] < p[i+1])i ++;//判断左右儿子的大小 if(num > p[i]) break;//终止条件如果这个数大,就终止循环。 p[x] = p[i];//将大的数替换p[x] x = i;//记录i的值 } p[x] = num;//最后将被替换的x记录的i值,给上num的值 } void heapbuild() { int i,t; for(i = n/2;i >= 1;i --) { heapjust(i,n); } for(i = n;i >= n-m+1;i --)//堆顶总是最大的元素 { t = p[1]; p[1] = p[i]; p[i] = t;//交换后p[i]存已经排好的顺序 heapjust(1,i-1);//重新调整,堆里面所有元素(共有i-1个) } } int main() { int i; while(scanf("%d%d",&n,&m)!=EOF) { for(i = 1;i <= n;i ++) scanf("%d",&p[i]); heapbuild(); for(i = n;i >= n-m+1;i --) { if(i == n) printf("%d",p[i]); else printf(" %d",p[i]); } printf("\n"); } return 0; }
相关文章推荐
- hdu 1425 sort用堆排序做的
- hdu 1425 sort hash
- HDU-1425sort
- HDU-1425-sort
- HDU-1425(sort)
- HDU 1425 sort (hash)
- HDU 1425 sort (排序)
- HDU 1425 sort
- HDU 1425 sort
- hdu_1425 sort
- HDU 1425 sort 【哈希入门】
- sort (HDU_1425) 快速排序
- HDU 1425 ( sort )
- heap sort(hdu 1425)
- HDU 1425:sort
- hdu 1425 sort
- HDU 1425 sort(桶排序+哈希函数)
- HDU 1425 sort
- HDU 1425 sort
- E题hdu 1425 sort