SDUT3401->数据结构实验之排序四:寻找大富翁
2018-12-27 17:17
69 查看
#include<bits/stdc++.h> using namespace std; const int MaxN=1e6+100; int a[MaxN]; int n,m; void sift(int low,int high) //调整函数,建立最小堆,建立最小堆是一种方法!,聪明的方法,真是学到了,其他一般的做法会T { if(low<high) { int i,temp=a[low]; for(i=2*low; i<=high; i*=2) { if(i<high&&a[i]>a[i+1]) i++; //找儿子中最小的 if(temp<a[i]) break; //如果当前位置比两个儿子都小,就break a[low]=a[i]; //将比i节点 low=i; } a[low]=temp; } } int main() { int i,j,t; cin>>n>>m; for( i=1; i<=m; i++) scanf("%d",&a[i]); for(i=m/2; i>=1; i--) sift(i,m); for(i=m+1; i<=n; i++) { scanf("%d",&t); //由于数据量比较大,这个用cin便会T,坑了! if(a[1]>=t) //对于m个以后的数,如果比最小的还小,就不用管它了,否则让最小的a[1]变为该值,并做一波调整 continue; a[1]=t; for(j=m/2; j>=1; j--) sift(j,m); } for(i=m; i>0; i--) { swap(a[1],a[i]);//每次都将最小的放在数组的最后,依次调整下去,第一个便是最大的 sift(1,i-1); } for(i=1;i<=m;i++) printf("%d%c",a[i],i==m?'\n':' '); return 0; }
相关文章推荐
- 数据结构实验之排序四:寻找大富翁
- 【最小堆+堆排序】数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁——堆排序
- SDUT 3401 数据结构实验之排序四:寻找大富翁
- SDUTOJ(3401)数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁(堆排序)
- SDUT 3401 数据结构实验之排序四:寻找大富翁 堆排序
- 数据结构实验之排序四:寻找大富翁(堆排序)
- 数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁---3401
- 数据结构实验之排序四:寻找大富翁(堆排序)
- 数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁
- SDUTACM 数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁
- 数据结构实验之排序四:寻找大富翁