【算法与数据结构】在n个数中取第k大的数(基础篇)
(转载请注明出处:http://blog.csdn.net/buptgshengod)
题目介绍
在n个数中取第k大的数(基础篇),之所以叫基础篇是因为还有很多更高级的算法,这些以后再讨论。本文用两种最基本的方法来解决这个问题。使用java语言描述。例子是十个数中取第三大的。
算法一
public class test {
public static void main(String []args)
{
int i,j;
final int n=10;
final int k=3;
boolean flag=true;
int[] list=new int[n];
System.out.print("十个数里第三大的数");//题目
System.out.println(); //换行
for(i=0;i<10;i++)
{
list[i]=(int) (Math.random()*100);//随机生成100以内十个数
System.out.print(list[i]+",");
}
for(j=0;j<list.length-1;j++)
{
for(i=0;i<list.length-1;i++)
{
if(list[i]>=list[i+1])
{}
else
{
int m=list[i];
list[i]=list[i+1];
list[i+1]=m;
}
}
}
System.out.println(); //换行
for(i=0;i<10;i++)
{
System.out.print(list[i]+",");
}
System.out.println(); //换行
System.out.print("答案是"+list[k-1]);
}
}
显示结果
算法二
先取k个数,将他们排序。再从剩下的n-k个数中取数与k个数中最小的比较,如果比k个数最小的大,则替代最小的数。以此类推。
public class Test {
public static void main(String[] args)
{
int i,j,m;
final int n=10;
final int k=3;
int[] list=new int[n];
System.out.print("十个数取第三大");//题目
System.out.println();//换行
for(i=0;i<list.length;i++)
{
list[i]=(int) (Math.random()*100);
System.out.print(list[i]+",");
}
/*
* 取数组前三个数,将其按冒泡法从大到小排序
*/
for(j=0;j<k-1;j++)
{
for(i=0;i<k-1;i++)
{
if(list[i]>=list[i+1])
{}
else
{
int t=list[i];
list[i]=list[i+1];
list[i+1]=t;
}
}
}
for(i=k;i<n;i++)
{
if(list[k-1]>=list[i])
{}
else
{
list[k-1]=list[i];
for(j=0;j<k-1;j++)
{
for(m=0;m<k-1;m++)
{
if(list[m]>=list[m+1])
{}
else
{
int t=list[m];
list[m]=list[m+1];
list[m+1]=t;
}
}
}
}
}
System.out.println();
System.out.print("第三大的是"+list[k-1]);
}
}
显示结果
【算法与数据结构】在n个数中取第k大的数(基础篇)的更多相关文章
- 记录我对'我们有成熟的时间复杂度为O(n)的算法得到数组中任意第k大的数'的误解
这篇博客记录我对剑指offer第2版"面试题39:数组中出现次数超过一半的数字"题解1的一句话的一个小误解,以及汇总一下涉及partition算法的相关题目. 在剑指offer第2 ...
- 面试:用快排实现数组中的第K大的数
#include <iostream> #include <cassert> using namespace std; int selectKth(int a[],int st ...
- pandas取前K大的数,sort_values()和nlargest()速度比较
排序量比较大时: 数据量比较小时: 所以结论就是: 数据量大时选用nlargest,数据量小时选用sort_values() 具体数据量怎么算大:10000条时两个方法的时间差不多,所以可以按1000 ...
- 找出N个无序数中第K大的数
使用类似快速排序,执行一次快速排序后,每次只选择一部分继续执行快速排序,直到找到第K个大元素为止,此时这个元素在数组位置后面的元素即所求 时间复杂度: 1.若随机选取枢纽,线性期望时间O(N) 2.若 ...
- [经典算法题]寻找数组中第K大的数的方法总结
[经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26 字体:[大 中 小] 打印复制链接我要评论 今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...
- Java找N个数中最小的K个数,PriorityQueue和Arrays.sort()两种实现方法
最近看到了 java.util.PriorityQueue.刚看到还没什么感觉,今天突然发现他可以用来找N个数中最小的K个数. 假设有如下 10 个整数. 5 2 0 1 4 8 6 9 7 3 怎么 ...
- 【算法剖析】寻找两个已序数组中的第k大元素
1.问题描述 给定两个数组A与B,其大小分别为m.n,假定它们都是已按照增序排序的数组,我们用尽可能快的方法去求两个数组合并后第k大的元素,其中,1\le k\le(m+n).例如,对于数组A=[1, ...
- POJ 2104 K-th Number ( 求取区间 K 大值 || 主席树 || 离线线段树)
题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用 ...
- 寻找数组中的第K大的元素,多种解法以及分析
遇到了一个很简单而有意思的问题,可以看出不同的算法策略对这个问题求解的优化过程.问题:寻找数组中的第K大的元素. 最简单的想法是直接进行排序,算法复杂度是O(N*logN).这么做很明显比较低效率,因 ...
随机推荐
- HTML meta标签总结与属性使用介绍
之前学习前端中,对meta标签的了解仅仅只是这一句. <meta charset="UTF-8"> 但是打开任意的网站,其head标签内都有一列的meta标签.比如我博 ...
- 前端模板文件化jQuery插件 $.loadTemplates
工作中使用前端模板引擎,如 artTemplate.jsRender,来替代拼接字符串. 可是直接把模板写在页面上会带来页面臃肿,模板无法重用,与 ASP.NET等后端语言语法冲突等问题. 所以将多个 ...
- asp.net中后台javaScrip的使用
ClientScriptManager csm = Page.ClientScript; //Script标记靠近<form>标签 //csm.Register ...
- 利用WebRequest类上传文件
说明:1.WebRequest类是一个抽象类,所以上传类实际使用的是其子类 2.打开Fiddler软件,监视正常网页的文件上传,可以看到http协议的请求和响应信息,简略说明 (第一行:请求说明 PO ...
- NewRowNeeded和UserAddedRow事件以及RowsAdded的区别使用
NewRowNeeded事件当 VirtualMode 属性为 true 时,将在用户定位到 DataGridView 底部的新行时发生,适合给新行建立一些默认数据和按规则应该产生的数据,但此时不推荐 ...
- 模块化编程AMD&CommonJS
为什么要模块化编程 如果JS也可以像类似python,Java使用import,引入我们想要的模块,想要什么模块,就加载什么模块,可以给前端编程带来更多的便捷,结构更加清晰明了.但是,这样做有一个前提 ...
- [r]How To Use Git To Create A Key
怎样生成公钥(via) 工作流程 安装设置 git 下载最新版本的git http://git-scm.com/downloads 当你安装完成git的时候,你需要简单的配置一下,打开终端: 用户名 ...
- 如何“任性”使用Android的drawText()
Android的canvas上可以画很多基本形状,诸如:圆,矩形,线条等等,其中当属文字即drawText()较难理解和使用(额,这只是就个人感受),下面将慢慢介绍下如何简单使用drawText(). ...
- HDU 1069 Monkey and Banana(LIS最长上升子序列)
B - LIS Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descripti ...
- DM9000C网卡驱动程序移植
1.取消版本号不符终止程序运行 2.iobase基地址修改为s3c3440的0x20000000 3.网卡使用的中断号改为IRQ_EINT7 4.中断触发方式改为上升沿触发 5.设置S3C2440的m ...