【算法与数据结构】在n个数中取第k大的数(基础篇)

时间:2020-12-26 04:47:08

(转载请注明出处: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]);
}
}

显示结果

【算法与数据结构】在n个数中取第k大的数(基础篇)

算法二

     
 先取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大的数(基础篇)

【算法与数据结构】在n个数中取第k大的数(基础篇)的更多相关文章

  1. 记录我对&&num;39&semi;我们有成熟的时间复杂度为O&lpar;n&rpar;的算法得到数组中任意第k大的数&&num;39&semi;的误解

    这篇博客记录我对剑指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&lowbar;values&lpar;&rpar;和nlargest&lpar;&rpar;速度比较

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

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

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

  5. &lbrack;经典算法题&rsqb;寻找数组中第K大的数的方法总结

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

  6. Java找N个数中最小的K个数,PriorityQueue和Arrays&period;sort&lpar;&rpar;两种实现方法

    最近看到了 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 &lpar; 求取区间 K 大值 &vert;&vert; 主席树 &vert;&vert; 离线线段树&rpar;

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

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

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

随机推荐

  1. Linux系统管理命令之用户组管理

    涉及的配置文件 /etc/group /etc/gshadow /etc/gshadow- 可用于还原 不同系统的备份文件名称不同:name-或name.old 命令: 添加用户组groupadd 组 ...

  2. css float对于之后布局的影响

    后面的元素不浮动,即便设置了宽度,表面上只占了一定的宽度,但实际上占了全屏.(所以设置了overflow之后,并且之后的div设置了宽度,再设置margin-left可能不起作用). 高度对浮动的影响 ...

  3. 【CF39E】【博弈论】What Has Dirichlet Got to Do with That&quest;

    Description You all know the Dirichlet principle, the point of which is that if n boxes have no less ...

  4. python 实现文本文件中的数字按序排序(位操作,低内存占用)

    文本文件内容   ./txt 3241155299893344 处理代码: import sys a = bytearray(b'') for i in range(100): a.append(or ...

  5. EF 6&period;x、EF Core实现dynamic动态查询和EF Core实现多个上下文实例池你了解多少?

    前言 很长一段时间没有写博客了,今天补上一篇吧,偶尔发现不太愿意写博客了,太耗费时间,不过还是在坚持当中,毕竟或许写出来的东西能帮到一些童鞋吧,接下来我们直奔主题.无论是在在EF 6.x还是EF Co ...

  6. 44&period;Odoo产品分析 &lpar;五&rpar; – 定制板块&lpar;1&rpar; – 管理odoo安装&lpar;1&rpar;

    查看Odoo产品分析系列--目录 1 管理员的注意事项 在记录重要的配置细节时必须要小心,而且必须要有一个连续性的合适的.让系统能够安装备份并运行在一个可接受的时间内的计划. 1.1 制定实施策略 如 ...

  7. Qt 快捷键

  8. CF101D Castle 树形DP、贪心

    题目传送门 题意:给出一个有$N$个点的树,你最开始在$1$号点,经过第$i$条边需要花费$w_i$的时间.每条边只能被经过$2$次.求出到达除$1$号点外所有点的最早时间的最小平均值.$N \leq ...

  9. 手速太慢QAQ

    显然D是个细节题,但是还剩1h时看眼榜还没人过EF,只好冷静写D,大概思路是任何时候如果min(n,m)<=2,max(n,m)<=4暴搜,否则直接贪心是很对的,即第一步让S.T长度平均化 ...

  10. 升级 macOS Mojave 后部分软件 &lpar;如 VS Code&rpar; 字体变虚的解决方法

    目前有些朋友的设备可能还是“非 Retina” 显示器,那这样如果升级到 Mojave 后你会发现文字不清晰了,这是因为 Mojave 默认关闭了文字次像素渲染字体,你需要在终端里执行: defaul ...