继上篇深入探究第k大数之后,此篇博客继续对上一篇进行深入探究,深入探究N个数组的第K大数是多少?
修改后的程序代码如下
package com.yting.hadoop.rpc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * 第三大数优化 * @author zhengyunfei * @date 2014-04-18 * */ public class GetThirdData { public static void main(String[] args) throws IOException { int N = 0; int k=0; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入一位数组的个数:"); N=Integer.parseInt(br.readLine()); System.out.println("请输入要求第几大数:"); k=Integer.parseInt(br.readLine()); int a[] = new int[N]; //自定义10万个数,赋予一位数组a for(int i=0;i<N;i++){ System.out.println("请输入第"+(i+1)+"个数:"); int num=Integer.parseInt(br.readLine()); a[i]=num; } //程序执行开始时间 long pre=System.currentTimeMillis(); //求第k大数,与第三大数为例 int result=getSortKnum(a,k); //程序执行结束时间 long last=System.currentTimeMillis(); long time=last-pre;//运行时间 System.out.println("运行结果为:"); System.out.print("第三大数:"+result+" 耗时:"+time+"毫秒"); } /** * 求第k大数 * @param a 数组名 * @param k 第几大数 * @return 第k大数 */ private static int getSortKnum(int [] a,int k){ int array[]=new int [k];//首先定义一个k个数的一位数组 //将数组前k个数存放到数组array当中 for(int i=0;i<k;i++){ array[i]=a[i]; } array=getSortArray(array);//对这k个数的数组进行冒泡排序 for(int i=k;i<a.length;i++){//将余下的数与第k大数进行比较 if(a[i]>array[k-1]){//如果余下数比第k大数大的话,将第k大数替换掉 array[k-1]=a[i]; array=getSortArray(array);//重新对数组进行排序 } } return array[k-1]; } /** * 对数组进行冒泡排序 * @author zhengyunfei * @date 2014-04-18 * @param a 数组名 * @return a 排序后的数组 */ private static int [] getSortArray(int a[]){ for(int i=0;i<a.length-1;i++){ for(int j=0;j<a.length-i-1;j++){ if(a[j]<a[j+1]){ swap(a, j); } } } return a; } /** * 交换位置 * @author zhengyunfei * @date 2014-04-18 * @param a 数组名 * @param j 下标 */ private static void swap(int[] a, int j) { int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } }
运行结果如下:
请输入一位数组的个数: 10 请输入要求第几大数: 3 请输入第1个数: 1 请输入第2个数: 2 请输入第3个数: 3 请输入第4个数: 4 请输入第5个数: 9 请输入第6个数: 8 请输入第7个数: 7 请输入第8个数: 6 请输入第9个数: 5 请输入第10个数: 4 运行结果为: 第三大数:7 耗时:0毫秒
经过测试,程序是正确的,但是细心的朋友会发现,在控制台输入N和K的时候,我没有做限制,比如N和K必须是数字,并且N必须大于等于K,在此本人就不做限制了,感兴趣的朋友可以补充上。
至此,针对求第三大数的算法,我已经写了5篇博客,从前之后以此为:
第一篇:初写求第三大数算法
第二篇:优化求第三大数算法
第三篇:深入探究第三大数
第四篇:深入探究第K大数
第五篇:深入探究N个数组的第K大数