`
郑云飞
  • 浏览: 795589 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入探究第k大数

 
阅读更多

       继深入探究第三大数之后,我又写下这一篇博客,深入探究第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大数

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics