给出一个数组,要求查找出这个数组中按顺序排第K大的数字。

思路:利用快速排序的思想,把数组中的元素分治,并计算中间值的位置,如果是K,则这个数就是第K大的数字,如果比K小,那么再次利用快速排序分治中值 以后的数据,如果比K大,则排序前面的数字,直到找到K的位置。

下面给出C++实现的代码:

#include <cstdlib>
#include <iostream>using namespace std;int partition(int data[],int first,int last)  //¿ìËÙÅÅÐòµÄ·Öλ
{
int pivot=data[first];
while(first<last)
{
while(first<last&&data[last]>pivot)
last--;  data[first]=data[last];
while(first<last&&data[first]<pivot)
first++; data[last]=data[first];
}
data[first]=pivot;
return first;
}int findKth(int data[],int first,int last,int k)
{
int kth;
if(first==last)  kth=data[first];
else
{
int pivot=data[first];    //Ïȸø¼Ç¼ÏÂÀ´
int splitPoint=partition(data,first,last);  //ÕâÊÇÿһ´Î·Ö¸îµÄµãλ
if(k<splitPoint)
kth=findKth(data,first,splitPoint-1,k);
else
if(k>splitPoint)
kth=findKth(data,splitPoint+1,last,k);
else
kth=pivot;
}
return kth;
}
int main(int argc, char *argv[])
{int a[11]={-1,11,17,18,5,7,14,9,6,27,21};//ÕýÈ·µÄ˳ÐòÊÇ£º5,6,7,9,11,14,17,18,21,27 int t=findKth(a,1,10,6);cout<<t<<endl;system("PAUSE");return EXIT_SUCCESS;
}

算法设计--查找无序数组中第K大的数字相关推荐

  1. 查找无序数组中第K大的数

    思路: 利用快速排序的划分思想 可以找出前k大数,然后不断划分 直到找到第K大元素 代码: #include <iostream> #include <algorithm> # ...

  2. 算法12--topK求一个数组中第k大的数

    求一个数组中第k大的值 解法一: 建立一个k个元素的最大堆,首先将数组中前k个元素放入堆中,此时堆顶元素为第k大的元素,后面继续遍历数组,比较堆顶元素与数组中元素值,当数组中元素小于堆顶元素时,将堆顶 ...

  3. 寻找无序数组中第k大的数

    对于一个无序的数组,怎样找到其中第k大的数呢?下面总结几种方法. 1.直接排序法 使用常见的归并排序.堆排序等算法对数组进行排序,然后找到第k大的数.排序算法的时间复杂度为O(nlogn),所以算法总 ...

  4. 经典算法题:寻找数组中第k大的元素

    这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. 扩展思考:如何处理数组中的重复元素?比如,对于数组a={1,2,2,2,3,3,3},第二大的元素应该是3还 ...

  5. java从数组查找指定整数_如何在Java中使用重复项查找整数数组中的K个缺失数字?...

    java从数组查找指定整数 自从我讨论任何编码或算法面试问题以来已经有很长时间了,因此我想重新考虑一种最流行的基于数组的编码问题,即在给定数组中查找缺失的数字. 在进行编程工作面试之前,您可能已经听说 ...

  6. 如何在Java中使用重复项查找整数数组中的K个缺失数字?

    自从我讨论任何编码或算法面试问题以来已经有很长时间了,因此我想重新考虑一种最流行的基于数组的编码问题,即在给定数组中查找缺失的数字. 在进行编程工作面试之前,您可能已经听说过或看到过此问题,但是面试官 ...

  7. 求无序数组中第k大的数

    如果是排好序的数组,则比较简单,直接$arr[$k-1]就能求出,如果不是排好序的就需要先排序,但这种时间复杂度为O(n2),所以不能直接排序.我们知道快速排序就是找一个哨兵,使左边的数比它大,右边的 ...

  8. O(n)算法得到数组中第k大的数字

    思路:只要牵扯到排序,那么复杂度就是O(nlogn)的了.这里我们借鉴了快速排序的思想,首先任取一个数字,将小于它的放到左边,大于它的放到右边,然后这个数字的位置就可以确定.通过比较k和这个数字的位置 ...

  9. 快速查找无序数组中的第K大数?

    1.题目分析: 查找无序数组中的第K大数,直观感觉便是先排好序再找到下标为K-1的元素,时间复杂度O(NlgN).在此,我们想探索是否存在时间复杂度 < O(NlgN),而且近似等于O(N)的高 ...

最新文章

  1. 谷歌官方TensorFlow开发者认证来了,吴恩达:学我的课,报名费五折
  2. python语言怎么输入-Python input()函数:获取用户输入的字符串
  3. linux centos8新特性及安装教程
  4. jsp页面提示“Multiple annotations found at this line: - The superclass javax.servlet.http.HttpServlet w
  5. 开卡教程_流量卡开卡教程(必看)
  6. tf调不到keras怎么 回事_格力变频空调快速维修方法及技巧 空调压缩机不到一分钟就停,怎么回事?...
  7. (pytorch-深度学习系列)网络中的网络(NiN)
  8. python itemgetter函数用法_Python itemgetter函数怎么用?
  9. Intellij 中的git操作 转!
  10. 在Logstash中配置多个管道
  11. CentOS7如何关闭防火墙
  12. 64位内核第三讲,Windbg的使用.以及命令
  13. 学习韩顺平java基础笔记 (自用)
  14. yolov3训练步骤
  15. 一不做,二不休, 干脆把开局库更换的批处理文件也调试好放出来...
  16. 【日常篇】006_从黑体辐射到RGB——如何定量计算光谱的颜色?
  17. Excel批量填充空白行内容的方法及技巧
  18. 字节跳动开启员工暴富计划,大手笔回购期权,有人最高能赚175%
  19. 2021年北京市级企业技术中心申报时间及流程是什么,补贴300万
  20. 整理一些全志 D1 / D1s 的 DisplayEngine / LCD / HDMI 常用骚操作

热门文章

  1. 关于c数据类型的范围
  2. 【Linux 操作系统】 Secure CRT 终端配置 -- 配置语法高亮 光标 和 字体
  3. GNU make manual 翻译( 一百八十一)
  4. 无需安装的CLI才是最好的
  5. vim入门教程(实践第一)
  6. Navigator 对象 深入研究
  7. JavaScript导出Excel通用代码。
  8. cacti忘记密码怎么办
  9. js提取url参数的几种方法。(搜集)
  10. Spring中的AOP在Advice方法中获取目标方法的参