算法设计--查找无序数组中第K大的数字
给出一个数组,要求查找出这个数组中按顺序排第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大的数字相关推荐
- 查找无序数组中第K大的数
思路: 利用快速排序的划分思想 可以找出前k大数,然后不断划分 直到找到第K大元素 代码: #include <iostream> #include <algorithm> # ...
- 算法12--topK求一个数组中第k大的数
求一个数组中第k大的值 解法一: 建立一个k个元素的最大堆,首先将数组中前k个元素放入堆中,此时堆顶元素为第k大的元素,后面继续遍历数组,比较堆顶元素与数组中元素值,当数组中元素小于堆顶元素时,将堆顶 ...
- 寻找无序数组中第k大的数
对于一个无序的数组,怎样找到其中第k大的数呢?下面总结几种方法. 1.直接排序法 使用常见的归并排序.堆排序等算法对数组进行排序,然后找到第k大的数.排序算法的时间复杂度为O(nlogn),所以算法总 ...
- 经典算法题:寻找数组中第k大的元素
这算是一道相当经典的算法题了: 在长度为N的乱序数组中寻找第k(n>=k)大的元素. 扩展思考:如何处理数组中的重复元素?比如,对于数组a={1,2,2,2,3,3,3},第二大的元素应该是3还 ...
- java从数组查找指定整数_如何在Java中使用重复项查找整数数组中的K个缺失数字?...
java从数组查找指定整数 自从我讨论任何编码或算法面试问题以来已经有很长时间了,因此我想重新考虑一种最流行的基于数组的编码问题,即在给定数组中查找缺失的数字. 在进行编程工作面试之前,您可能已经听说 ...
- 如何在Java中使用重复项查找整数数组中的K个缺失数字?
自从我讨论任何编码或算法面试问题以来已经有很长时间了,因此我想重新考虑一种最流行的基于数组的编码问题,即在给定数组中查找缺失的数字. 在进行编程工作面试之前,您可能已经听说过或看到过此问题,但是面试官 ...
- 求无序数组中第k大的数
如果是排好序的数组,则比较简单,直接$arr[$k-1]就能求出,如果不是排好序的就需要先排序,但这种时间复杂度为O(n2),所以不能直接排序.我们知道快速排序就是找一个哨兵,使左边的数比它大,右边的 ...
- O(n)算法得到数组中第k大的数字
思路:只要牵扯到排序,那么复杂度就是O(nlogn)的了.这里我们借鉴了快速排序的思想,首先任取一个数字,将小于它的放到左边,大于它的放到右边,然后这个数字的位置就可以确定.通过比较k和这个数字的位置 ...
- 快速查找无序数组中的第K大数?
1.题目分析: 查找无序数组中的第K大数,直观感觉便是先排好序再找到下标为K-1的元素,时间复杂度O(NlgN).在此,我们想探索是否存在时间复杂度 < O(NlgN),而且近似等于O(N)的高 ...
最新文章
- 谷歌官方TensorFlow开发者认证来了,吴恩达:学我的课,报名费五折
- python语言怎么输入-Python input()函数:获取用户输入的字符串
- linux centos8新特性及安装教程
- jsp页面提示“Multiple annotations found at this line: - The superclass javax.servlet.http.HttpServlet w
- 开卡教程_流量卡开卡教程(必看)
- tf调不到keras怎么 回事_格力变频空调快速维修方法及技巧 空调压缩机不到一分钟就停,怎么回事?...
- (pytorch-深度学习系列)网络中的网络(NiN)
- python itemgetter函数用法_Python itemgetter函数怎么用?
- Intellij 中的git操作 转!
- 在Logstash中配置多个管道
- CentOS7如何关闭防火墙
- 64位内核第三讲,Windbg的使用.以及命令
- 学习韩顺平java基础笔记 (自用)
- yolov3训练步骤
- 一不做,二不休, 干脆把开局库更换的批处理文件也调试好放出来...
- 【日常篇】006_从黑体辐射到RGB——如何定量计算光谱的颜色?
- Excel批量填充空白行内容的方法及技巧
- 字节跳动开启员工暴富计划,大手笔回购期权,有人最高能赚175%
- 2021年北京市级企业技术中心申报时间及流程是什么,补贴300万
- 整理一些全志 D1 / D1s 的 DisplayEngine / LCD / HDMI 常用骚操作