`
LoriSun
  • 浏览: 11916 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

小试 二分法

 
阅读更多
需求:在小->大的有序数组中找到对应日期的位置。

public class FinderPosition {
	
	private static int findPositionInArray(int[] i, int target) {
		int cusor = 0, rangeStart = 0, rangeEnd = i.length, findCount = 0;
		while (true) {
			findCount++;
			if(target < i[rangeStart] || target > i[rangeEnd - 1]) {
				cusor =  -1;
				break;
			}
			if (target == i[cusor])
				break;
			cusor = (rangeEnd + rangeStart) / 2;
			if (i[cusor] > target) {
				rangeEnd = cusor;
			}else if (i[cusor] < target){
				rangeStart = cusor;
			}else if (i[cusor] == target) {
				break;
			}
		}
		System.out.println("Found " + findCount +" times, the result is:" + cusor);
		return cusor;
	}

	public static void main(String[] args) {
		int[] i = { 20080130,20080131, 20080229, 20080331, 20080430, 20080530, 20080630,
				20080731, 20080829, 20080901, 20080929, 20080930, 20081031,
				20081128, 20081231, 20090101, 20090130, 20090227, 20090331,
				20090401, 20090430, 20090501, 20090529, 20090630, 20090701,
				20090731, 20090831, 20090901, 20090930, 20101014, 20101015,
				20101020, 20101029, 20101031, 20101101, 20101111, 20101112,
				20101114, 20101117, 20101119, 20101126, 20101129, 20101130,
				20101201, 20101202, 20101203, 20101206, 20101207, 20101208,
				20101209, 20101210, 20101213, 20101214, 20101215, 20101216,
				20101217, 20101218, 20101220, 20101221, 20101222, 20101223,
				20101224, 20101225, 20101227, 20101228, 20101230, 20101231,
				20110101, 20110103, 20110104, 20110105, 20110106, 20110107,
				20110110, 20110111, 20110112, 20110113, 20110114, 20110118,
				20110119, 20110120, 20110121, 20110124, 20110125, 20110126,
				20110126, 20110127, 20110201, 20110203, 20110207, 20110208,
				20110210, 20110211, 20110214, 20110215, 20110216, 20110218,
				20110221, 20110222, 20110223, 20110224, 20110225, 20110228,
				20110301, 20110302, 20110303, 20110307, 20110308, 20110309,
				20110310, 20110311, 20110315, 20110316, 20110317, 20110318,
				20110323, 20110324, 20110325, 20110328, 20110329, 20110330,
				20110404, 20110406, 20110407, 20110419, 20110420};
		
		int target  = 20110420;
		System.out.println("Begin to find: " + target);
		int position = findPositionInArray(i,target);
		if (position != -1)
			System.out.println("position " + position + " is: " + i[position]);

	}
}


结果:
Begin to find: 20110420
Found 7 times, the result is:125
position 125 is: 20110420

2的x方 <= i.length, 循环查找次数不会多于x次.
分享到:
评论

相关推荐

    二分法流程图1

    二分法流程图1 二分法是一种常用的数值计算方法,用于寻找单变量函数的零点。它的基本思想是通过不断地将搜索范围缩小,来逼近函数的零点。下面我们将通过流程图来详细地介绍二分法的工作过程。 首先,我们需要...

    温度转换二分法_二分法_温度二分法查表_40_

    标题中的“温度转换二分法”是指在处理温度测量时,采用二分法来查找温度对应的电压或电阻值。二分法,又称折半查找法,是一种高效的算法,常用于有序数据集合中寻找特定元素。在温度测量领域,如果我们有一个预设的...

    二分法matlab程序.zip_matlab DICHOTO_matlab 二分法_matlab二分法_二分法主程序

    二分法(dichotomie) 即一分为二的方法. 设[a,b]为R的闭区间. 逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的...

    二分法文献和程序

    二分法,也称为折半搜索或二分搜索,是一种在有序数组中查找特定元素的搜索算法。这个方法的核心思想是通过不断将搜索区间减半,来快速定位目标值的位置。二分法在信息技术、数据处理和算法设计等领域有着广泛的应用...

    二分法排序算法 C语言实现

    根据给定的文件信息,我们可以总结出以下关于“二分法排序算法C语言实现”的相关知识点: ### 1. 二分法搜索算法原理 二分法搜索算法,也称为折半查找算法,是一种在有序数组中查找特定元素的搜索算法。其基本思想...

    二分法的使用

    二分法的使用 二分法是一种常用的数值计算方法,用于找到函数的零点或极值。在计算机科学中,二分法是解决直际问题的重要工具。下面我们将详细介绍二分法的使用和实践。 二分法的定义 二分法是一种数值计算方法,...

    c语言二分法递归求解函数根

    二分法,也称为折半搜索,是一种在有序数组中查找特定元素的搜索算法。它通过不断将查找区间减半,快速定位目标值。在数值分析领域,二分法也被用于求解方程,特别是连续函数的零点。在本案例中,我们将探讨如何用...

    二分法_二分法解方程_

    二分法,也称为折半搜索或二分搜索,是一种在有序数组中查找特定元素的搜索算法。这个方法的关键在于其高效性,每次查询都能将搜索区间减半,因此在大量数据中查找特定值时非常有效。二分法不仅用于查找,还可以应用...

    二分法查询最近值

    利用java二分法来计算最靠近值,通过二分法来遍历数据,得到想要最近值

    二分法解线性方程二分法解线性方程

    二分法,也称为折半搜索或区间搜索,是一种在有序序列中查找特定元素的搜索算法。它通过不断将搜索范围减半来逼近目标值,适用于解决特定类型的数学问题,如寻找连续函数的零点。在本场景中,我们将探讨如何运用...

    C语言二分法求解方程

    本例实现了用c语言实现了二分法求解方程。本例主要介绍用二分法求解方程f(X)=sin(x)在(-3,7)这个范围内的解C语言实现方法。 求解主要通过函数BisectRoot()来完成。该函数首先根据二分法的需要扫描根的存在 及根的...

    三种二分法MATLAB程序

    二分法,也称为折半查找法或区间搜索法,是一种在有序数据集合中寻找特定元素的算法。在MATLAB中,二分法通常用于数值计算,如求解方程的根、查找数组中的特定值或者优化问题。下面将详细讨论三种不同的二分法MATLAB...

    二分法计算方法及VB编程代码设计

    二分法计算方法及VB编程代码设计 二分法是一种常用的数值分析方法,用来求解非线性方程的根。其基本思想是将搜索区间不断地缩小,直到找到根所在的位置。二分法的优点是计算速度快、精度高,但需要搜索区间的初值离...

    VC++6.0 实现计算方法中的二分法

    二分法,又称折半搜索法,是一种在有序数组中查找特定元素的搜索算法。它以其高效的性能在计算方法中占据重要地位,特别是在解决数值计算问题时,如求解方程的根、优化问题和搜索特定值。在VC++6.0环境下实现二分法...

    VB 二分法求方程根

    在VB(Visual Basic)编程语言中,二分法是一种经典的数值方法,用于寻找单变量方程的实数根。这种方法适用于连续函数,并且在给定的区间内已知函数值改变符号。以下是对二分法及其在VB中实现的详细解释。 首先,...

    二分法 文件写入读出

    在Java编程语言中,二分法是一种高效的搜索技术,它基于分治策略,适用于已排序的数据集合。在处理大量数据时,二分法通常比线性搜索更快,因为它将问题分解为更小的部分来解决。这里我们将探讨如何利用二分法进行...

    图形学 二分法直线裁剪

    本文将深入探讨“二分法直线裁剪”这一技术,以及如何使用VC6.0编程环境来实现这一算法。 首先,我们要理解直线裁剪的基本原理。在二维图形中,我们经常需要将直线限制在特定的矩形视窗(窗口坐标系统)内,这个...

    数据结构快速排序二分法查找

    "数据结构快速排序二分法查找" 快速排序和二分法查找是数据结构中两个非常重要的概念,它们都是解决实际问题的重要工具。在本文中,我们将详细介绍快速排序和二分法查找的原理、实现和应用。 快速排序 快速排序...

    二分法解非线性方程C++代码

    二分法解非线性方程C++代码

    二分法Fortran代码

    用Fortran科学计算语言实现二分法求解方程的零点,代码风格简单明了,亲自调试通过

Global site tag (gtag.js) - Google Analytics