数据结构基础之堆排序
#pta 寻找大富翁
胡润研究院的调查显示,截至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 max 1000010
int a[max];
void perdown(int a[], int x, int n)//向下过滤,n是数组总个数
{int parent, child;int tmp = a[x];for (parent = x; parent * 2 + 1 <= n-1 ; parent = child) {child = 2 * parent + 1;if (child <=(n - 2) && a[child] < a[child + 1])child++;if (a[child] > tmp) { //好处是不用每次都要交换a[parent] = a[child];}else break;}a[parent] = tmp;
}
void swap(int* x, int* y) {int z = *x;*x = *y;*y = z;
}
void Duipai(int a[], int n, int m) //n是数组总个数
{int i;for (i = (n - 2) / 2; i >= 0; i--) {perdown(a, i, n);}for (i = n-1; i > 0; i--) {swap(&a[0], &a[i]);perdown(a, 0, i);}
}
int main()
{int n, m, i;scanf("%d %d", &n, &m);for (i = 0; i < n; i++) {scanf("%d", &a[i]);}if (n < m)m = n;if (n == 1)printf("%d", a[0]);else {Duipai(a, n , m);for (i = n - 1; i >= n - m; i--) {if (i == n - 1)printf("%d", a[i]);else printf(" %d", a[i]);}}return 0;
}
##第二种
在这里插入代码片
#include<stdio.h>
#define max 1000010
int a[max];
void perdown(int a[], int x, int n)//向下过滤,n是是下标
{int parent, child;int tmp = a[x]; //好处是不用每次都要交换for (parent = x; parent * 2 + 1 <= n ; parent = child) {//n改child = 2 * parent + 1;if (child <=(n - 1) && a[child] < a[child + 1])child++;//n-1改if (a[child] > tmp) { a[parent] = a[child];}else break;}a[parent] = tmp;for (int i = 0; i <= n; i++)printf("%d ", a[i]);printf("\n");
}
void swap(int* x, int* y) {int z = *x;*x = *y;*y = z;
}
void Duipai(int a[], int n, int m) //n是下标
{int i;for (i = (n - 1) / 2; i >= 0; i--) {//要改perdown(a, i, n);}for (i = n-1; i >= 0; i--) {swap(&a[0], &a[i+1]);//要改if(i)perdown(a, 0, i);//改}
}
int main()
{int n, m, i;scanf("%d %d", &n, &m);for (i = 0; i < n; i++) {scanf("%d", &a[i]);}if (n < m)m = n;if (n == 1)printf("%d", a[0]);else {Duipai(a, n-1 , m);for (i = n - 1; i >= n - m; i--) {if (i == n - 1)printf("%d", a[i]);else printf(" %d", a[i]);}}return 0;
}
数据结构基础之堆排序相关推荐
- 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)
堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...
- “数据结构基础”系列网络课程主页
#前言 自从下决心要解决学生动手能力差的问题,开始了课程实践资源的建设之旅:自迷上了翻转课堂,所教课程的视频,也就逐渐形成了体系.在为我自己的校内学生服务的同时,也希望能够让更多人有机会用到. 自全身 ...
- 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记
一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...
- 【数据结构基础】图的遍历方法与应用
前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...
- 求单链表的最大值与原地逆转_数据结构基础复习09.ppt
数据结构基础复习09.ppt 数据结构考研辅导 基础复习 浙江大学计算机学院 内容提纲 考研概述 考察目标理解数据结构的基本概念 掌握数据结构的逻辑结构 存储结构及其差异 以及各种基本操作的实现 在掌 ...
- 1. 数据结构基础知识
1. 数据结构基础知识 基本概念 线性结构:结构中的数据元素之间只存在一对一的关系. 树形结构:结构中的数据元素之间存在一对多的关系. 图状结构或网状结构:结构中的数据元素之间存在多对多的关系. 数据 ...
- 【数据结构基础】之数组介绍,生动形象,通俗易懂,算法入门必看
前言 本文为数据结构基础数组相关知识,下边将对数组的定义.性质及结构,数组的各种玩法如循环遍历数组.查找数组最大值.数组元素的位移等,二维数组的定义及用法等进行详尽介绍~ Java全栈学习路线可参考: ...
- Algorithm:【Algorithm算法进阶之路】之数据结构基础知识
Algorithm:[Algorithm算法进阶之路]之数据结构基础知识 相关文章 Algorithm:[Algorithm算法进阶之路]之数据结构二十多种算法演示 Algorithm:[Algori ...
- asp子窗口读取父窗口数据_算法与数据结构基础 - 数组(Array)
数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...
最新文章
- 免费云服务器无限流量,云服务器弄无限流量
- 基于 OpenFire 的TVBox管理平台开发笔记
- 如何将数据写入excel中,而不覆盖原有数据
- 内置对象和自定义对象的原型链
- SQL基础(八)-- sql左右连接中的on and 和 on where 的区别
- 【MYSQL快速入门】常用函数:文本函数
- python读二进制文件博客园_python二进制读写文件
- 量化客户需求强度-建立VOC
- UNIX/Linux RHEL6.3 root密码破解,GRUB加密(图文并茂)
- 2015 年 4 月份 LeanCloud 更新汇总
- App测试的11点建议
- C:\Program Files (x86)\SogouInput\Components\程序异常结束 ,QT
- linux dstat,dstat 用法详解
- 大数据面试杀招——Hadoop高频考点,正在刷新你的认知!
- 《刘润·5分钟商学院》学习总结01
- springboot+vue旅行社旅游拼团系统java
- Windows安装Gitea
- UE4开发三:创建游戏模式、角色、控制器
- 正则表达式在线生成工具
- opecv BGR转NV21
热门文章
- 读文献——《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》
- 7.25 1figting!
- 下载webStorm,nodejs,git并简单配置,为JavaScript做准备
- 99乘法表java取偶数,99乘法表(乘法口诀朗诵mp3)
- cephfs:1 clients failing to respond to cache pressure原因分析
- Failing because I am unlikely to write too排查方案
- ASP.NET程序设计复习题
- the disk drive for uuid=XXXX ( /media/sda1) is not reday yet or not present
- 整除分块 B - Make Divisible
- NPOI使用ShiftRows向excel插入行,并复制原有样式