继深入探究第三大数之后,我又写下这一篇博客,深入探究第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大数
相关推荐
D_(POJ_1723)(思维)(第k大数).cpp
Sa中元素的个数小于k,则Sb中的第k-|Sa|个元素即为第k大数;2. Sa中元素的个数大于等于k,则返回Sa中的第k大数。时间复杂度近似为O(n) 解法4: 二分[Smin,Smax]查找结果X,统计X在数组中出现,且整个数组中比X大
主要介绍了C++实现的O(n)复杂度内查找第K大数算法,结合实例形式分析了算法的原理以及具体实现方法,需要的朋友可以参考下
大数计算器大数计算器大数计算器大数计算器
本篇文章是对线性时间复杂度求数组中第K大数的方法进行了详细的分析介绍,需要的朋友参考下
大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律...
一个数组中第二大数的查找,很方便用户进行数据的查找,代码简单,安全移动
ACM大数模版ACM大数模版ACM大数模版ACM大数模版ACM大数模版ACM大数模版ACM大数模版ACM大数模版
用C++写的重载的大数模板 大数加法、大数乘法、大数除法、大数减法 带有注释
分享一下用C/C++实现的大数相加和大数相乘,可以拿来当工具用。
大数相乘大数相加大数阶乘代码 完全解决代码简易 容易理解 有什么缺点欢迎评论 交流
本篇文章是对数组中求第K大数的实现方法进行了详细的分析介绍,需要的朋友参考下
计算 大数加大数 大数减大数 大数乘大数 大数乘小数 小数阶乘 数组处理
高精度算法,包括大数加法,大数减法,大数乘法,大数除法,大数取余等高精度算法
C++实现大数加减乘数
大数相乘大数相乘大数相乘大数相乘大数相乘
c++大数类,重载了全部运算符,很详细