数据结构实验之排序四:寻找大富翁

布满荆棘的人生 2022-07-17 01:15 245阅读 0赞

数据结构实验之排序四:寻找大富翁

#

Time Limit: 150MS Memory limit: 512K

题目描述

2015胡润全球财富榜调查显示,个人资产在1000万以上的高净值人群达到200万人,假设给出N个人的个人资产值,请你快速找出排前M位的大富翁。

输入

首先输入两个正整数N( N ≤ 10^6)和M(M ≤ 10),其中N为总人数,M为需要找出的大富翁数目,接下来给出N个人的个人资产,以万元为单位,个人资产数字为正整数,数字间以空格分隔。

输出

一行数据,按降序输出资产排前M位的大富翁的个人资产值,数字间以空格分隔,行末不得有多余空格。

示例输入

  1. 6 3
  2. 12 6 56 23 188 60

示例输出

  1. 188 60 56

提示

请用堆排序完成。

来源

xam

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void headadjust(int *a,int i,int size)
  4. {
  5. int lchild=2*i;
  6. int rchild=2*i+1;
  7. int max=i;
  8. if(i<=size/2)
  9. {
  10. if(lchild<=size&&a[lchild]>a[max])
  11. {
  12. max=lchild;
  13. }
  14. if(rchild<=size&&a[rchild]>a[max])
  15. {
  16. max=rchild;
  17. }
  18. if(max!=i)
  19. {
  20. swap(a[i],a[max]);
  21. headadjust(a,i,size);
  22. }
  23. }
  24. }
  25. void headbuild(int *a,int size)
  26. {
  27. int i;
  28. for(i=size/2; i>=1; i--)
  29. {
  30. headadjust(a,i,size);
  31. }
  32. }
  33. void headsort(int *a,int size)
  34. {
  35. int i;
  36. headbuild(a,size);
  37. for(i=size; i>=1; i--)
  38. {
  39. swap(a[1],a[i]);
  40. headadjust(a,1,i-1);
  41. }
  42. }
  43. int main()
  44. {
  45. int n,m,t,l,j;
  46. int a[12];
  47. int k,i;
  48. scanf("%d %d",&n,&m);
  49. k=1;
  50. for(i=0; i<n; i++)
  51. {
  52. scanf("%d",&t);
  53. if(k<m+1)
  54. {
  55. a[k++]=t;
  56. }
  57. else
  58. {
  59. l=1;
  60. for(j=2; j<k; j++)
  61. {
  62. if(a[l]>a[j])
  63. {
  64. l=j;
  65. }
  66. }
  67. if(a[l]<t)
  68. {
  69. a[l]=t;
  70. }
  71. }
  72. }
  73. headsort(a,m);
  74. for(i=m; i>=1; i--)
  75. {
  76. if(i==m)
  77. {
  78. printf("%d",a[i]);
  79. }
  80. else
  81. {
  82. printf(" %d",a[i]);
  83. }
  84. }
  85. }

发表评论

表情:
评论列表 (有 0 条评论,245人围观)

还没有评论,来说两句吧...

相关阅读