(转载请注明出处: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. 【LeetCode】快排-无序整数数组中找第k大的数(或者最小的k个数)

    一个有代表性的题目:无序整数数组中找第k大的数,对快排进行优化. 这里先不说这个题目怎么解答,先仔细回顾回顾快排,掰开了揉碎了理解理解这个排序算法:时间复杂度.空间复杂度:什么情况下是复杂度最高的情况 ...

  2. n个数中找最大数c语言,N个数中找到第K大的数值(C语实现)

    N个数中找到第K大的数值(C语实现) N个数中找到第K大的数值(C语实现) 研究生了,选了计算机算法这门课程,这周布置了一个作业,在OJ上做:**N个数中找到第K大的数值**.大一简单学过C语言基础, ...

  3. 如何在10亿个数中找到前1000大的数?

    2019独角兽企业重金招聘Python工程师标准>>> 如何在10亿个数中找到前1000大的数? 定位 TopN问题 算法 排序不是最优的解决方案: 可以考虑分治法: 类似快速排序中 ...

  4. 无序数组中找第K大的数

    类快排算法 leetcode215 由于只要求找出第k大的数,没必要将数组中所有值都排序. 典型解法:快速排序分组. 在数组中找到第k大的元素 取基准元素,将元素分为两个集合,一个集合元素比基准小,另 ...

  5. 在N个数中查找第K大的数字(Top K问题)

    在N个乱序数字中查找第k大的数字,时间复杂度可以减小至 O(N*logN) O(N) O(1) O(2) 答案:B 所谓"第(前)k大数问题"指的是在长度为n(n>=k)的乱 ...

  6. 两个排序数组中找第k大的数

    一.题目描述 给定两个已经排序好的数组,找到两者所有元素中第k大的元素 二.解法分析 解法一:参照归并排序 将两个有序数组变成一个有序数组:merge两个数组,然后求第k大的数,时间复杂度O(m+n) ...

  7. n个数中输出前m大的数

    描述 n个数,要求输出其中的m个最大数 想法1 开辟辅助数组,用插入排序,将前m最大数插入到辅助数组中,时间复杂度O(n*m) 想法2 类似快速排序的想法,将前m大的数都聚到最左边,再进行一次排序输出 ...

  8. C语言——用 堆 实现求N个数中第K大的数

    问题描述: 在N(0<N<100000)个数中,找出第K(0<k<100000)大的数. 例如:1,2,3,4,5,6,7,8,9 中第3大的数为 7. 输入: 输入有多组数据 ...

  9. leetcode 703. 数据流中的第K大元素 最小堆解法 c语言

    如题: 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含 ...

最新文章

  1. kvm虚拟机命令梳理
  2. SpringMVC+hibernate+mysql+EASYUI的登陆+CRUD
  3. js移除某个class_用JS添加和删除class类名
  4. Django讲课笔记07:设置路由分发规则
  5. Python+matplotlib绘制等电位面图
  6. Num37 spring 事务 ssh整合
  7. VS2019 + Qt ERROR MSB4181 QtRunwork 返回了false,但未记录错误
  8. Matlab重建信号实验总结,实验三信号采样与重建(实验报告).doc
  9. 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
  10. 受力分析软件_大赛作品 | 关于Z型路灯受力情况分析
  11. 图解通信原理与案例分析-18:低功耗、远距离物联网无线通信技术LoRa概述与扩频通信的基本原理
  12. 系统开发方法和开发模型
  13. 南邮 | 计算机图形学大作业:Skybox + Shadow volume
  14. html在ie浏览器中中文为什么是乱码
  15. 三相电网的共模与差模
  16. 浙大这个班太牛气!诞生128家创业公司,总市值高达千亿
  17. vscode java乱码问题解决
  18. HTML5七夕情人节表白网页(新年倒计时-红色雪花) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css爱
  19. 5W1H分析法(登陆)
  20. 完成ECshop的开源系统的详细过程

热门文章

  1. linux获取网卡的ip,Windows和Linux系统下获取多网卡的ip地址
  2. android+包+反编译,简单的Android之apk包反编译方法
  3. oracle 裸设备 ocr,裸设备建立RAC的OCR设备不一致的问题
  4. android 手机跑分,安兔兔安卓手机跑分性能榜公布:第一名实至名归?
  5. php mysql log文件怎么打开_如何查看mysql的日志文件
  6. python生成器杨辉三角_python 生成器生成杨辉三角的方法(必看)
  7. java文件递归_java递归处理文件夹和文件
  8. 项目背景介绍及文件系统基本概念简介
  9. 远程桌面连接后远程计算机注销,使用windows8.1 pro的远程桌面,当断开远程桌面时被控制端用户注销问题...
  10. 西工大与东北大学计算机,国内世界高水平大学排名:西北工业大学位居第一,东北大学排第二...