查找最小的K个元素,使用最大堆。
查找最小的K个元素,使用最大堆,具体代码如下:
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- using namespace std;
- void swap(int *a, int *b)
- {
- int temp;
- temp = *a;
- *a = *b;
- *b = temp;
- }
- void heap_adjust(int *a, int i, int size)
- {
- int lchild = 2 * i;
- int rchild = 2 * i + 1;
- int max = i;
- if (i <= size / 2) //大于size/2的为叶子节点,不需要调整
- {
- if (lchild <= size && a[lchild]>a[max])
- max = lchild;
- if (rchild <= size && a[rchild]>a[max])
- max = rchild;
- if (max != i)
- {
- swap(&a[i], &a[max]);
- heap_adjust(a, max, size); //依此调整下面的子树,为了防止交换之后不满足堆的性质
- }
- }
- }
- void create_heap(int *a, int size)
- {
- int i = 0;
- for (i = size / 2; i >= 1; i--)
- heap_adjust(a, i, size);
- }
- void heap_sort(int *a, int size)
- {
- int i = 0;
- int temp = 0;
- create_heap(a, size);
- for (i = size; i >= 1; i--)
- {
- swap(&a[i], &a[1]);
- heap_adjust(a, 1, i - 1);
- }
- }
- int main(int argc, char **argv)
- {
- int a[100];
- int size = 0;
- int nTemp = 0;
- cout << "堆个数:";
- while (scanf("%d", &size) == 1 && size >0)
- {
- int i = 0;
- for (i = 1; i <= size; i++)
- scanf("%d", &a[i]);
- heap_sort(a, size);
- printf("请输入要显示的K\n");
- scanf("%d", &nTemp);
- for (i = 1; i <= nTemp; i++)
- printf("%d ", a[i]);
- }
- return 0;
- }
运行效果如图1所示:
aaarticlea/png;base64,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" alt="" />
图1 运行效果
查找最小的K个元素,使用最大堆。的更多相关文章
- 【编程题目】查找最小的 k 个元素
5.查找最小的 k 个元素(数组)题目:输入 n 个整数,输出其中最小的 k 个.例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4. 算法里面学 ...
- 查找最小的k 个元素之C#算法实现
紧接着上一篇微软编程面试100题,这次想解决的是查找最小的K个元素,题目是:输入n 个整数,输出其中最小的k 个.例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 ...
- 【Data Structure & Algorithm】 查找最小的k个元素
查找最小的k个元素 题目:输入n个整数,输出其中最小的k个. 例如输入1, 2, 3, 4, 5, 6, 7和8这八个数字,则最小的4个数字为1, 2, 3和4. 分析:这道题最简单的思路是把输入的n ...
- 5.查找最小的k个元素[Kmin]
[题目] 输入n个整数,输出其中最小的k个. 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. [分析] 这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前 ...
- 5.查找最小的k个元素(数组)
题目: 输入n个整数,输出其中最小的k个,例如输入1,2,3,4,5,6,7,8这8个数,则最小的4个是1,2,3,4(输出不要求有序) 解: 利用快速排序的partition,算导上求第k大数的思想 ...
- 查找最小的k个元素
题目:输入n个整数,输出其中最小的k个. 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 两种思路,无非就是时间与空间的妥协. 限制空间的时候要对原数组进行排序, ...
- 程序员面试50题(1)—查找最小的k个元素[算法]
题目:输入n个整数,输出其中最小的k个.例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数 ...
- 查找最小的k个元素 【微软面试100题 第五题】
题目要求: 输入n个整数,输出其中最小的k个. 例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4. 参考资料:剑指offer第30题. 题目分析: 解法一: 用快排 ...
- IT公司100题-5-查找最小的k个元素
问题描述: 输入n 个整数,输出其中最小的k 个. 例如输入8, 7, 6, 5, 4, 3, 2, 1这8 个数字,则最小的3 个数字为3, 2, 1. 分析: 时间复杂度O(nlogn)方法: ...
随机推荐
- linux 屏幕亮度调整命令
我的Fujitsu S7211的笔记本屏幕显示在Ubuntu 10.04不如在Vista下明亮,一直以为是驱动的问题.后来从老外的博客中,发现了这个亮度其实可以调节. 2种方法: 1. 调节屏幕对比度 ...
- HTML5之兴趣爱好
- easyUI 新增合计一行
/** * 详情页面的查询 */ @Override public Map<String, Object> pointsStardList(PointsCpt pointsCpt, int ...
- Android 连接 SQL Server (jtds方式)——上
本文将介绍开发Android程序,连接SQL Server,通过第三方包jtds的方式. 如果你有同样的需求,请跟着做一遍,博主将以最详细的方式,进行介绍. 首先说明,Java.Android连接SQ ...
- ChesFrame框架介绍
一直以来想写一个框架,想达到的目的: 1.对曾经做过项目的总结 2.节约构建系统的成本,不用每次都从零开始做起 3.写框架并在使用中不断的完善框架,这也是个积攒过程. 经历了一个多月的时间,一个基本的 ...
- 初定为EGame
[Q]在纠结到底要用什么方式写博客,是原生态记录框架编写过程(有点所谓的手把手教学的感觉有木有),还是每个模块整合完毕后写分析文章,新手没有写过博客,不知道那种效果好.朋友们给点建议? 这套框架的初衷 ...
- windowIsTranlucent 属性
项目中踩的大坑. 先埋. int alwaysFinish = 0; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERS ...
- Asp.net 导航条【1】
PHP比较成熟的开放的源代码比较多,比方说PrestaShop,比方说Discuz!...... 虽然语言不同,但基本原理是一样的,有时间的话读一读,对学习ASP.NET应该是非常有好处的(唉,什么时 ...
- js apply
1.作用 函数的apply方法的作用与call方法类似,也是改变this指向,然后再调用该函数.唯一的区别就是,它接收一个数组作为函数执行时的参数 Fn.apply(obj, [arg1, arg2, ...
- 使用微妙计算PHP脚本执行时间
在PHP中,大多数的时间格式都是以UNIX时间戳表示的,而UNIX时间戳是以s(秒)为最小的计量时间的单位.这对某些应用程序来说不够精确,所以可以调用microtime()返回当前UNIX时间戳和微妙 ...