(转载请注明出处:http://blog.csdn.net/buptgshengod

题目介绍

          
在n个数中取第k大的数(基础篇),之所以叫基础篇是因为还有很多更高级的算法,这些以后再讨论。本文用两种最基本的方法来解决这个问题。使用java语言描述。例子是十个数中取第三大的。

算法一

             用冒泡法将n个数从大到小排序,再取第k大。
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大的数(基础篇)的更多相关文章

  1. 记录我对'我们有成熟的时间复杂度为O(n)的算法得到数组中任意第k大的数'的误解

    这篇博客记录我对剑指offer第2版"面试题39:数组中出现次数超过一半的数字"题解1的一句话的一个小误解,以及汇总一下涉及partition算法的相关题目. 在剑指offer第2 ...

  2. 面试:用快排实现数组中的第K大的数

    #include <iostream> #include <cassert> using namespace std; int selectKth(int a[],int st ...

  3. pandas取前K大的数,sort_values()和nlargest()速度比较

    排序量比较大时: 数据量比较小时: 所以结论就是: 数据量大时选用nlargest,数据量小时选用sort_values() 具体数据量怎么算大:10000条时两个方法的时间差不多,所以可以按1000 ...

  4. 找出N个无序数中第K大的数

    使用类似快速排序,执行一次快速排序后,每次只选择一部分继续执行快速排序,直到找到第K个大元素为止,此时这个元素在数组位置后面的元素即所求 时间复杂度: 1.若随机选取枢纽,线性期望时间O(N) 2.若 ...

  5. [经典算法题]寻找数组中第K大的数的方法总结

    [经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26   字体:[大 中 小] 打印复制链接我要评论   今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...

  6. Java找N个数中最小的K个数,PriorityQueue和Arrays.sort()两种实现方法

    最近看到了 java.util.PriorityQueue.刚看到还没什么感觉,今天突然发现他可以用来找N个数中最小的K个数. 假设有如下 10 个整数. 5 2 0 1 4 8 6 9 7 3 怎么 ...

  7. 【算法剖析】寻找两个已序数组中的第k大元素

    1.问题描述 给定两个数组A与B,其大小分别为m.n,假定它们都是已按照增序排序的数组,我们用尽可能快的方法去求两个数组合并后第k大的元素,其中,1\le k\le(m+n).例如,对于数组A=[1, ...

  8. POJ 2104 K-th Number ( 求取区间 K 大值 || 主席树 || 离线线段树)

    题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用 ...

  9. 寻找数组中的第K大的元素,多种解法以及分析

    遇到了一个很简单而有意思的问题,可以看出不同的算法策略对这个问题求解的优化过程.问题:寻找数组中的第K大的元素. 最简单的想法是直接进行排序,算法复杂度是O(N*logN).这么做很明显比较低效率,因 ...

随机推荐

  1. c语言字符数组和指针的经典用法

    1.字符数组 许多情况下,对字符串的处理使用字符数组会更加方便,比如: 我觉得不改变字符串的原有顺序,对字符串进行删除等操作时,使用字符数组效果会更好. eg:给定字符串(ASCII码0-255)数组 ...

  2. Windows的命令行怎么支持通配符

    摸索出一个小技巧,虽然Windows的命令行本身不支持通配符,但可以在脚本里把传进来的参数当通配符用 只要加上@ARGV = glob "@ARGV";就行了 @ARGV = gl ...

  3. Java学习----集合框架总结

    集合框架总结: Collection接口: Set接口: HashSet//对象必须实现hashCode方法,元素没有顺序呢,效率比LinkedHashSet高 LinkedHashSet//是Has ...

  4. Why Doesn’t Drag-and-Drop work when my Application is Running Elevated? – A: Mandatory Integrity Control and UIPI(转载)

    f you run notepad elevated (Right click | Run as Administrator), and you try and drag-and-drop a fil ...

  5. 《JavaScript高级程序设计 第3版》-学习笔记-1

    P1-P30页 1.<script>标签的属性 async:async(html)  | async="async"(xhtml),表示立即下载脚本,但不马上执行(执行 ...

  6. 如何完美打造Win8 Metro版IE10浏览器页面(转)

    Windows8 内置两种 Internet Explorer 10 (以下简称 IE10),一个是在桌面环境下使用的 IE10:视窗操作.可以支持各种插件(ActiveX):而另外一个则是在新的开始 ...

  7. 【Linux】 诊断工具-strace

    1,别人家的总结: http://www.cnblogs.com/bangerlee/archive/2012/02/20/2356818.html 2,我自己碰到问题: 暂无. 3,使用场景: 程序 ...

  8. ZT: WEB学习资料

    根据个人经验整理一些Web开发的一些技术书籍,希望对需要进入Web开发领域的TX有所指导,由于是在家里整理的,所有每本书对应的豆瓣链接打不开,如果整理有缺陷请多多指出. 入门篇:通过相关技术的全面基础 ...

  9. 堆和栈的区别【zz】

    一.预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2. ...

  10. Firebase能改变什么(对SaaS,BaaS,PaaS,IaaS的解释比较清楚)

    作为Google Cloud对标Amazon AWS重要的一环,Firebase能改变什么? 雷锋网 2016-05-25 12:18:49 查看源网址 阅读数:12 按:本文作者刘之,野狗CEO.野 ...