胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人。假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁。

输入格式:
输入首先给出两个正整数N(≤10​^6)和M(≤10),其中N为总人数,M为需要找出的大富翁数;接下来一行给出N个人的个人资产值,以百万元为单位,为不超过长整型范围的整数。数字间以空格分隔。

输出格式:
在一行内按非递增顺序输出资产排前M位的大富翁的个人资产值。数字间以空格分隔,但结尾不得有多余空格。

输入样例:

8 3
8 12 7 3 20 9 5 18

输出样例:

20 18 12

代码:

#include<stdio.h>#define MAXN 10
typedef int ElementType;
void Adjust(ElementType A[], int i, int N);//对A[]中前N个元素从第i个元素开始向下迁移调整
void InsertionSort(ElementType A[], int N);//插入排序int main()
{int N, M, i;ElementType A[MAXN], temp;scanf("%d%d",&N,&M);if(N > MAXN){for(i=0;i<M;i++)scanf("%d",&A[i]);for(i=(M-1)>>1;i>=0;i--)//前M个元素建立最小堆Adjust(A, i, M);//只需维护一个规模为M的堆,之后元素若大于堆顶则加入,最后堆中一定是最大的M个元素for(i=M;i<N;i++){scanf("%d",&temp);//读入剩下的数据if(temp>A[0]){//如果新数据比较大A[0] = temp;//新数据替换最小元Adjust(A, 0, M);//调整最小堆}}for(i=M-1;i>0;i--){//对堆中M个数据进行堆排序temp = A[0]; A[0] = A[i]; A[i] = temp;//将堆顶元素A[0]与当前堆的最后一个元素A[i]换位Adjust(A, 0, i);//将有i个元素的新堆从根节点向下过滤调整}}else{//如果N很小则用插入排序for(i=0;i<N;i++)scanf("%d",&A[i]);InsertionSort(A, N);}if(N < M) M = N;//如果N更小则输出前N个printf("%d",A[0]);for(i=1;i<M;i++)printf(" %d",A[i]);printf("\n");return 0;
}void Adjust(ElementType A[], int i, int N){int Child;ElementType temp;for(temp=A[i];(2*i+1)<N;i=Child){Child = 2*i + 1;//左孩子节点if(Child!=N-1 && A[Child+1]<A[Child]) Child++;//Child指向左右孩子中较小者if(temp>A[Child]) A[i] = A[Child];//若temp的孩子有比其小者,temp继续向下找位置else break;}A[i] = temp;//将temp放到当前位置
}void InsertionSort(ElementType A[], int N){ElementType temp;int i, j;for(i=1;i<N;i++){temp = A[i];//取出未排序序列中的第一个元素for(j=i; j>0 && temp>A[j-1];j--)A[j] = A[j-1];//依次与已排序序列中元素比较并右移A[j] = temp;//放进合适位置}
}

PTA_数据结构与算法_7-38 寻找大富翁 (25分)相关推荐

  1. 7-3 寻找大富翁 (25 分)

    7-3 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁.输入格式: 输入首先 ...

  2. R7-7 寻找大富翁 (25 分)

    R7-7 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入 ...

  3. 7-227 寻找大富翁 (25 分)

    7-227 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输 ...

  4. 7-13 寻找大富翁 (25分)

    7-13 寻找大富翁 (25分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首 ...

  5. 7-22 寻找大富翁 (25 分)

    7-22 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入 ...

  6. 7-1 寻找大富翁 (25 分)

    7-1 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首 ...

  7. 7-6 寻找大富翁 (25分)

    7-6 寻找大富翁 (25分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首先 ...

  8. 7-1 寻找大富翁 (25 分)(思路加详解+两种做法(一种优先队列,一种vector容器))

    一:题目 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首先给出两个正整数N(≤1 ...

  9. 寻找大富翁 (25 分)

    胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首先给出两个正整数N(≤10​6​​ ...

最新文章

  1. AR行业成本拆解解析
  2. React-native 官方 demo
  3. Linux基础—screen命令
  4. 买卖股票 状态机模型的理解
  5. ie浏览器跳转谷歌浏览器_微软IE浏览器的命运:加速死亡
  6. CSS实现div梯形分割
  7. 激活策略 查询_5个提问,详细介绍北极星指标的策略框架
  8. 什么linux系统是中文的,什么是Linux系统
  9. 机动车驾驶人科目三考试项目及合格标准
  10. python五子棋游戏15*15_在STM32上运行五子棋小游戏(15x15)
  11. C#GridViewExport帮助类,美化导出
  12. 简单的动态网站java,Java实践:一个简单的动态数组实现
  13. RSTP原理和新增特性
  14. RestClient测试
  15. Windows 8.1 安装Ruby on Rails手记
  16. 哈工大计算机网络Mooc 第九章笔记(网络层(下))
  17. k8s 亲和、反亲和、污点、容忍
  18. spark常用的linux命令,GitHub - Sparkinzy/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...
  19. JS逆向 2021-8-16 网易云音乐 params、encSecKey参数
  20. NOI2018 退役记

热门文章

  1. 【小样本基础】有监督小样本,半监督小样本,无监督小样本
  2. 关于湖北美术学院花坛长出娃娃
  3. java游戏 天剑传承,《天剑传承》之无双迷宫攻略
  4. ES8中对字符串补白的方式
  5. 2020 CCPC - 网络选拔赛 签到计划
  6. 西南科技大学 Python程序设计 班长选举
  7. MyBatis高频面试题
  8. 关于Dell r720重装系统时遇到的识别不到磁盘的问题
  9. tf.convert_to_tensor
  10. 2018华为软件精英挑战赛经验(一)