查找最小的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个元素,使用最大堆。的更多相关文章

  1. 【编程题目】查找最小的 k 个元素

    5.查找最小的 k 个元素(数组)题目:输入 n 个整数,输出其中最小的 k 个.例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4. 算法里面学 ...

  2. 查找最小的k 个元素之C#算法实现

    紧接着上一篇微软编程面试100题,这次想解决的是查找最小的K个元素,题目是:输入n 个整数,输出其中最小的k 个.例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 ...

  3. 【Data Structure & Algorithm】 查找最小的k个元素

    查找最小的k个元素 题目:输入n个整数,输出其中最小的k个. 例如输入1, 2, 3, 4, 5, 6, 7和8这八个数字,则最小的4个数字为1, 2, 3和4. 分析:这道题最简单的思路是把输入的n ...

  4. 5.查找最小的k个元素[Kmin]

    [题目] 输入n个整数,输出其中最小的k个. 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. [分析] 这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前 ...

  5. 5.查找最小的k个元素(数组)

    题目: 输入n个整数,输出其中最小的k个,例如输入1,2,3,4,5,6,7,8这8个数,则最小的4个是1,2,3,4(输出不要求有序) 解: 利用快速排序的partition,算导上求第k大数的思想 ...

  6. 查找最小的k个元素

    题目:输入n个整数,输出其中最小的k个. 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 两种思路,无非就是时间与空间的妥协. 限制空间的时候要对原数组进行排序, ...

  7. 程序员面试50题(1)—查找最小的k个元素[算法]

    题目:输入n个整数,输出其中最小的k个.例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数 ...

  8. 查找最小的k个元素 【微软面试100题 第五题】

    题目要求: 输入n个整数,输出其中最小的k个. 例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4. 参考资料:剑指offer第30题. 题目分析: 解法一: 用快排 ...

  9. IT公司100题-5-查找最小的k个元素

    问题描述: 输入n 个整数,输出其中最小的k 个. 例如输入8, 7, 6, 5, 4, 3, 2, 1这8 个数字,则最小的3 个数字为3, 2, 1.   分析: 时间复杂度O(nlogn)方法: ...

随机推荐

  1. UVALIVE 4819 最大流

    题意:有N场比赛,每场比赛需要一定数量的题目数,现在有M个题目,每个题目只能提供给特定的几场比赛,并且一次只能在一场比赛中出现. 问最多可以举办多少场比赛. 思路:因为N = 15 , 所以直接二进制 ...

  2. DateGridew导出Excel表+常见错误提示

    在敲机房收费系统的时候,显示数据的时候需要将DateGridew 中的数据导出进Excel表.DateGridew导出Excel表是比较常见的,当然导出Excel表有很多种方法,下面是个人认为比较容易 ...

  3. 自己动手写shell之chgrp,chown,chmod

    1.chgrp实现 #include <grp.h> #include <unistd.h> void chgrp(char * groupname,char * filena ...

  4. Java基础知识强化之IO流笔记11:递归之递归概述和注意事项

    1. 递归: 方法定义中调用方法本身的现象. e.g: public void show(int n ) { if(n <= 0) { System.exit(0); } System.out. ...

  5. Filter过滤器实现同一地址手机和电脑页面不同

    最近做一个网站,客户要求在访问主域名的时候实现电脑访问时展示电脑页面,手机访问时展示h5的手机页面,这种需求的使用还是比较多的:尤其网站需要百度推广的时候,百度推广就要求同一域名下,手机访问时展示手机 ...

  6. WebService简单使用

    1.创建Webservice服务应用程序 方式一:将VS2010采用的默认框架,改为使用框架.NET Framework2.0\3.0\3.5,这时新建"项目"or新建" ...

  7. 解决ASP.NET中ReportView与IE11的兼容性问题

    前久发现以前用ReportView开发的一个软件的报表,在IE11上运行时出错,陆续查了好几天才解决了问题. 开发环境: VS2010,ReportView 10.0.402,RDLC报表模板 问题: ...

  8. JavaScript--数组--关联(hash)数组

    关联(hash)数组的原理: hash算法: 接收一个字符串,计算出一个尽量不重复的序号 不同的字符串,计算出的序号尽量不同 相同的字符串,计算出的序号一定是相同 存入数据时: 将自定义下标名称交给h ...

  9. 重新开始学习javase_内部类

    转(http://www.cnblogs.com/dolphin0520/p/3811445.html) 内部类: 在Java 1.1 中,可将一个类定义置入另一个类定义中.这就叫作“内部类”.创建内 ...

  10. IntelliJ IDEA提示忽略大小写

    1.打开设置(CTRL+ALT+S) 2.搜索Code Completion,点击Case sensitive completion后面的选择框,选中None