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

简介: (转载请注明出处:http://blog.csdn.net/buptgshengod) 题目介绍           在n个数中取第k大的数(基础篇),之所以叫基础篇是因为还有很多更高级的算法,这些以后再讨论。本文用两种最基本的方法来解决这个问题。使用java语言描述。例子是十个数中取第三大的。 算法一              用冒泡法将n个数从大到小排序,再取第k大。

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

显示结果

目录
相关文章
|
17天前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
50 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
20天前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
18 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
13天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
29 4
|
20天前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
14 0
数据结构与算法学习十四:常用排序算法总结和对比
|
20天前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
26 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
24天前
|
机器学习/深度学习 存储 算法
【数据结构与算法基础】——算法复杂度
【数据结构与算法基础】——算法复杂度
|
19天前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
20天前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
16 0
|
23天前
|
存储 算法 Java
数据结构和算法--分段树
数据结构和算法--分段树
11 0
|
26天前
|
算法
计科一二班算法数据结构实验9答案
计科一二班算法数据结构实验9答案
13 0