继深入探究第三大数之后,我又写下这一篇博客,深入探究第k大数。
代码如下:
package com.yting.hadoop.rpc;
/**
* 第三大数优化
* @author zhengyunfei
* @date 2014-04-18
*
*/
public class GetThirdData {
public static void main(String[] args) {
int a[] = new int[100000];
//自定义10万个数,赋予一位数组a
for(int i=0;i<100000;i++){
a[i]=i;
}
//程序执行开始时间
long pre=System.currentTimeMillis();
//求第k大数,与第三大数为例
int result=getSortKnum(a,3);
//程序执行结束时间
long last=System.currentTimeMillis();
long time=last-pre;//运行时间
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;
}
}
以第三大数为例,运行结果如下:
第三大数:99997 耗时:8毫秒
到此为止,针对求第三个数的算法,我一共写了4篇博客,以此记录下我的心路历程,这四篇博客,按照先后顺序以此为:
至此,针对求第三大数的算法,我已经写了5篇博客,从前之后以此为:
第一篇:初写求第三大数算法
第二篇:优化求第三大数算法
第三篇:深入探究第三大数
第四篇:深入探究第K大数
第五篇:深入探究N个数组的第K大数