zoukankan      html  css  js  c++  java
  • 百度面试题:找出第k大的数字所在的位置

    描述:

      写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。

    示例代码:[利用大顶堆排序,找到数组中第K大的数]

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 // 描述:
     5 // 写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。
     6 // 第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。
     7 /////////////////////////////////////////////////
     8 
     9 typedef struct Node
    10 {
    11     int data;
    12     int place;
    13 }Node;
    14 
    15 void createNode(Node n[],int a[],int size)
    16 {
    17     for(int i=0;i<size;i++)
    18     {
    19         n[i].data = a[i];
    20         n[i].place = i+1;
    21     }
    22 }
    23 void HeapAdjust(Node a[],int i,int size)
    24 {
    25     int lchild = i*2;
    26     int rchild = i*2+1;
    27     int max = i;
    28     if(i<=size/2)
    29     {
    30         if(a[max].data <a[lchild].data && lchild<=size)
    31             max = lchild;
    32         if(a[max].data <a[rchild].data && rchild<=size)
    33             max = rchild;
    34         if(max!=i)
    35         {
    36             swap(a[i],a[max]);
    37             HeapAdjust(a,max,size);
    38         }
    39     }
    40     
    41 }
    42 void NodeHeapSort(Node a[],int size,int k)
    43 {
    44     // 建堆
    45     int i=0;
    46     for(i=size/2;i>=0;--i)
    47         HeapAdjust(a,i,size);
    48 
    49     // 调整
    50     int j=1;
    51     for(i=size;i>=0;--i,++j)
    52     {
    53         swap(a[0],a[i]);
    54         if(j==k)
    55         {
    56             cout << a[i].place <<endl; break;
    57         }
    58         HeapAdjust(a,0,i-1);
    59     }
    60 }
    61 int main()
    62 {
    63     int a[] = {2,4,3,4,7};
    64     Node b[5];
    65     createNode(b,a,5);
    66     int k ;
    67     cout << "请输入k值:";cin>>k;
    68     NodeHeapSort(b,5,k); 
    69     return 0;
    70 }
  • 相关阅读:
    Python网络爬虫——Beautiful Soup
    Python网络爬虫——Request
    二叉树结构详解
    哈夫曼树与哈夫曼编码
    树的基本概念
    Linux系统管理—用户和用户组管理
    作为Web开发人员,必须知道的网络协议有哪些?
    编写可靠Linux shell脚本的八个建议
    云计算应用现状与关键技术
    Linux系统如何禁止普通用户切换root?
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2442803.html
Copyright © 2011-2022 走看看