查找最小的K个元素,使用最大堆,具体代码如下:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. using namespace std;
  4. void swap(int *a, int *b)
  5. {
  6.  
  7.     int temp;
  8.     temp = *a;
  9.     *a = *b;
  10.     *b = temp;
  11. }
  12. void heap_adjust(int *a, int i, int size)
  13. {
  14.     int lchild = 2 * i;
  15.     int rchild = 2 * i + 1;
  16.     int max = i;
  17.     if (i <= size / 2) //大于size/2的为叶子节点,不需要调整
  18.     {
  19.  
  20.         if (lchild <= size && a[lchild]>a[max])
  21.             max = lchild;
  22.         if (rchild <= size && a[rchild]>a[max])
  23.  
  24.             max = rchild;
  25.         if (max != i)
  26.         {
  27.             swap(&a[i], &a[max]);
  28.             heap_adjust(a, max, size); //依此调整下面的子树,为了防止交换之后不满足堆的性质
  29.         }
  30.     }
  31. }
  32.  
  33. void create_heap(int *a, int size)
  34. {
  35.     int i = 0;
  36.     for (i = size / 2; i >= 1; i--)
  37.         heap_adjust(a, i, size);
  38. }
  39.  
  40. void heap_sort(int *a, int size)
  41. {
  42.     int i = 0;
  43.     int temp = 0;
  44.     create_heap(a, size);
  45.     for (i = size; i >= 1; i--)
  46.     {
  47.  
  48.         swap(&a[i], &a[1]);
  49.         heap_adjust(a, 1, i - 1);
  50.     }
  51. }
  52.  
  53. int main(int argc, char **argv)
  54. {
  55.     int a[100];
  56.     int size = 0;
  57.     int nTemp = 0;
  58.     cout << "堆个数:";
  59.     while (scanf("%d", &size) == 1 && size >0)
  60.     {
  61.         int i = 0;
  62.         for (i = 1; i <= size; i++)
  63.             scanf("%d", &a[i]);
  64.         heap_sort(a, size);
  65.         printf("请输入要显示的K\n");
  66.         scanf("%d", &nTemp);
  67.         for (i = 1; i <= nTemp; i++)
  68.             printf("%d ", a[i]);
  69.     }
  70.     return 0;
  71. }

运行效果如图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. linux 屏幕亮度调整命令

    我的Fujitsu S7211的笔记本屏幕显示在Ubuntu 10.04不如在Vista下明亮,一直以为是驱动的问题.后来从老外的博客中,发现了这个亮度其实可以调节. 2种方法: 1. 调节屏幕对比度 ...

  2. HTML5之兴趣爱好

  3. easyUI 新增合计一行

    /** * 详情页面的查询 */ @Override public Map<String, Object> pointsStardList(PointsCpt pointsCpt, int ...

  4. Android 连接 SQL Server (jtds方式)——上

    本文将介绍开发Android程序,连接SQL Server,通过第三方包jtds的方式. 如果你有同样的需求,请跟着做一遍,博主将以最详细的方式,进行介绍. 首先说明,Java.Android连接SQ ...

  5. ChesFrame框架介绍

    一直以来想写一个框架,想达到的目的: 1.对曾经做过项目的总结 2.节约构建系统的成本,不用每次都从零开始做起 3.写框架并在使用中不断的完善框架,这也是个积攒过程. 经历了一个多月的时间,一个基本的 ...

  6. 初定为EGame

    [Q]在纠结到底要用什么方式写博客,是原生态记录框架编写过程(有点所谓的手把手教学的感觉有木有),还是每个模块整合完毕后写分析文章,新手没有写过博客,不知道那种效果好.朋友们给点建议? 这套框架的初衷 ...

  7. windowIsTranlucent 属性

    项目中踩的大坑.  先埋. int alwaysFinish = 0; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERS ...

  8. Asp.net 导航条【1】

    PHP比较成熟的开放的源代码比较多,比方说PrestaShop,比方说Discuz!...... 虽然语言不同,但基本原理是一样的,有时间的话读一读,对学习ASP.NET应该是非常有好处的(唉,什么时 ...

  9. js apply

    1.作用 函数的apply方法的作用与call方法类似,也是改变this指向,然后再调用该函数.唯一的区别就是,它接收一个数组作为函数执行时的参数 Fn.apply(obj, [arg1, arg2, ...

  10. 使用微妙计算PHP脚本执行时间

    在PHP中,大多数的时间格式都是以UNIX时间戳表示的,而UNIX时间戳是以s(秒)为最小的计量时间的单位.这对某些应用程序来说不够精确,所以可以调用microtime()返回当前UNIX时间戳和微妙 ...