`
郑云飞
  • 浏览: 817098 次
  • 性别: 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大数

分享到:
评论

相关推荐

    C++实现的O(n)复杂度内查找第K大数算法示例

    C++实现O(n)复杂度内查找第K大数算法示例 本文主要介绍了C++实现的O(n)复杂度内查找第K大数算法,通过实例形式分析了算法的原理以及具体实现方法。该算法可以在O(n)复杂度内查找第K大数,使得查找速度大大提高。 ...

    区间k大数查询.zip

    标题 "区间k大数查询.zip" 暗示着这是一个关于程序设计竞赛的题目,主要涉及算法,特别是处理数组或序列中的数据查询。这个题目很可能要求参赛者编写一个程序,能够在给定的数区间内找到最大的k个数字。在描述中提到...

    深入第K大数问题以及算法概要的详解

    第K大数问题在计算机科学和算法设计中是一个常见的问题,涉及到如何在一组无序的数据中找到第k个最大的元素。这个问题在数据处理、数据库查询优化、数据分析等领域都有广泛的应用。下面将对几种不同的解法进行详细...

    D_(POJ_1723)(思维)(第k大数).cpp

    D_(POJ_1723)(思维)(第k大数).cpp

    数组中求第K大数的实现方法

    在编程和算法设计中,"数组中求第K大数"是一个常见的问题,它涉及到高效地从一组数据中找出第K个最大值。本问题的解决方案通常基于分治策略,如快速选择算法,这是一种简化版的快速排序算法,用于解决特定情况下的...

    大数定律大数定律大数定律

    大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律大数定律...

    深入线性时间复杂度求数组中第K大数的方法详解

    线性时间复杂度求解数组中第K大数的问题是一个经典的数据结构与算法问题,它主要涉及到了排序算法中的快速选择算法。这篇文章将详细介绍如何在O(n)的时间复杂度内找到数组中的第K大数。 首先,理解这个问题的核心是...

    第二大数查找

    根据给定的信息,我们需要关注的是“第二大数查找”的知识点,但是提供的代码片段并没有直接与第二大数查找相关的实现。为了满足需求,我们将详细解释如何在数组中查找第二大的数,并使用 C++ 来实现这一功能。 ###...

    大数运算 大数相加 大数相乘

    本篇文章将详细介绍如何用C/C++实现大数相加和大数相乘。 首先,我们要理解大数的概念。在计算机内部,基本的数据类型如int、long等都有其存储范围限制,对于超出这些范围的整数,就需要用到大数表示。在C/C++中,...

    大数计算器 大数计算器

    在IT领域,大数计算器是一种专门用于处理超出普通计算范围的大整数的工具。这些大数可能达到数百、数千甚至更多的位数,远远超过普通计算机语言内置数据类型的限制。大数计算器通常支持基本的算术运算,如加法、减法...

    大数相乘大数相加大数阶乘代码

    在编程领域,大数操作是处理超过常规整型或浮点型变量所能表示范围的数值时的关键技术。这里我们关注的焦点是大数相乘、大数相加以及大数阶乘的算法实现,这些都是计算密集型任务,尤其是在处理极端数值时。下面将...

    gaojingdu.rar_c 大数加法_c++大数除法_大数 加 减 乘 除_大数算法_高精度

    在标题“gaojingdu.rar_c 大数加法_c++大数除法_大数 加 减 乘 除_大数算法_高精度”中,我们关注的是用C语言和C++实现的高精度算法,特别是大数的加法、减法、乘法和除法。这些操作是基础数学运算,但在计算机中...

    delphi大数运算单元

    在Delphi中,由于内置的Integer、Int64等类型有限的存储范围,当需要进行大数运算时,通常需要借助第三方库或者自定义的算法来实现。"delphi大数运算单元"是一个专为解决这个问题而编写的组件,它提供了完整的加法、...

    大数模板(C++)大数加法、大数乘法、大数除法

    用C++写的重载的大数模板 大数加法、大数乘法、大数除法、大数减法 带有注释

    大数运算c语言代码

    通过阅读和理解这些源代码,可以深入学习大数运算的实现细节。 注意,处理大数时,内存管理和溢出问题非常重要。在分配和释放内存时,需要确保正确处理,防止内存泄漏。同时,由于大数可能会导致数组长度超出预期,...

    C++大数相加减

    在编程领域,大数(Big Number)操作是指处理超过普通数据类型所能表示范围的整数。C++标准库并未提供内置的大数支持,因此要实现大数相加减的功能,通常需要自定义数据结构和算法。这个项目"BigNumberAdd"显然是...

    C++单链表实现大数加法

    C++单链表实现大数加法 大数加法是一种常见的算法问题,特别是在C++中实现大数加法时需要考虑到数字的位数和溢出问题。使用单链表来实现大数加法可以解决这个问题。本文将详细介绍如何使用C++单链表实现大数加法。 ...

Global site tag (gtag.js) - Google Analytics