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

二分搜索算法

阅读更多
/*
*  二分搜索算法用于针对已排序的集合进行搜索。

它的原理是:

1,  找到排序数组的中间元素,如果它匹配目标值,那么就返回它在数组中的索引。

2,  如果没有找到,那么判断中间值比目标值大还是小,

如果中间值比目标值大,那么就对第一个元素到middle-1的元素递归这个过程。

如果中间值比目标值小,那么就对middle+1到最后一个元素。

3,  如果结束的索引小于开始的索引,返回-1,表示没有找到。

4,  如果子集合有2个元素,那么各自比较。因为Java的整数除法会舍弃小数,如果数组只有2个元素,那么middle值一直都是第一个元素。

经过上述的递归过程,最终将返回匹配元素的索引,或者是-1,表示找不到。
*/
public class BinarySearh {
	public static void main(String[] args){
		 int[] array = {13,27,38,49,65,76,97};
		 int n = sq_Dichotomy_Search(array,0,array.length-1,38);
		 System.out.println(n);
	}
	
	
	public static int binarySearh(int[] array,int start,int end,int value){
		int middle = (start+end)/2;
		if(start>end){
			return -1;
		}
		if(start==(end-1)){
			if(array[start]==value){
				return start;
			}else if(array[end]==value){
				return end;
			}else{
				return -1;
			}
		}else if(array[middle]==value){
			return middle;
		}else if(array[middle]>value){
			return binarySearh(array,start,middle,value);
		}else if(array[middle]<value){
			return binarySearh(array,middle,end,value);
		}
			return -1;
	}

/*
*   有序数组二分查找算法函数sq_Dichotomy_Search0<用数组实现> 
     参数描述: 
         int array[]    :被查找数组 
         int n        :被查找数组元素个数 
         int key        :被查找的关键值 
     返回值: 
         如果没有找到:    sq_Dichotomy_Search0 = -1 
         否则:            sq_Dichotomy_Search0 = key数组下标 
*/
public static int binarySearh2(int array[],int start,int end,int key){   
	     int low,high,mid;   
	     low = start;   
	     high = end;   
	        
	     while(low<=high){   
	         mid = (high+low)/2;   
	         if(array[mid] == key)   
	             return(mid);   
	         /**//*key>array[mid] 表明要求查找的值在[mid+1,high]*/  
	         /**//*否则,在[low,mid-1]*/  
	         if(key > array[mid])   
	             low = mid + 1;   
	         else  
	             high = mid - 1;   
	     }   
	     return(-1);   
	 }


/**//* 
     有序数组插值查找算法函数sq_Dichotomy_Search1<用数组实现> 
     (插值查找算法是二分查找算法的改进) 
     参数描述: 
         int array[]    :被查找数组 
         int n        :被查找数组元素个数 
         int key        :被查找的关键值 
     返回值: 
         如果没有找到:    sq_Dichotomy_Search1 = -1 
         否则:            sq_Dichotomy_Search1 = key数组下标 
*/ 
 
public static int sq_Dichotomy_Search(int array[],int start,int end,int key)   {   
	      int low,high,        //二分数组的上,下标   
	          pos;            //查找码的大致(估算)位置   
	      low = 0;   
	      high = end;   
	      while(low <= high){   
	          pos = (key-array[low])/(array[high]-array[low])*(high-low)+low;   
	          /**//*找到关键值,中途退出*/  
	          if(key == array[pos])   
	              return(pos);   
	          if(key > array[pos])   
	              low = pos + 1;   
	          else  
	              high = pos - 1;   
	      }   
	      /**//*没有找到,返回-1*/  
	      return(-1);   
	  }  
}
分享到:
评论

相关推荐

    算法分析 二分搜索算法

    **二分搜索算法详解** 二分搜索算法,也称为折半搜索,是一种在有序数组中查找特定元素的有效方法。它的核心思想是通过不断缩小搜索范围,以递归或迭代的方式快速定位目标值。该算法充分利用了数组的有序特性,极大...

    二分搜索算法及其源代码

    二分搜索算法是一种高效、基于比较的搜索技术,它在有序数据集合中寻找目标值。这个算法的核心思想是不断缩小搜索范围,通过每次迭代将搜索区间减半,从而快速定位到目标元素。二分搜索算法在计算机科学和编程中有着...

    二分搜索 算法 C语言 动态

    用C语言动态实现二分搜索算法,可以清楚的看到算法之行的全部过程。

    大整数算法和二分搜索算法 Java

    在计算机科学中,大整数算法和二分搜索算法是两个重要的编程概念,尤其是在处理大量数据和优化搜索效率时显得尤为关键。 大整数算法主要应用于处理超过标准数据类型(如int、long)能表示的最大整数值。在Java中,`...

    二分搜索 设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

    设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j。

    使用 MATLAB 仿真经典算法的问题示例:实现二分搜索算法

    使用 MATLAB 仿真经典算法的问题示例:实现二分搜索算法; 使用 MATLAB 仿真经典算法的问题示例:实现二分搜索算法; 使用 MATLAB 仿真经典算法的问题示例:实现二分搜索算法; 使用 MATLAB 仿真经典算法的问题示例...

    二分搜索算法(分治策略)报告.doc

    二分搜索算法是一种高效的数据查找方法,属于分治策略的典型应用。在已排序的数组中,二分搜索通过不断将查找区间减半来定位目标元素。以下是关于这个实验报告的详细解读: 1. **问题描述**:实验要求在给定的、已...

    二分搜索算法的动态实现

    二分搜索算法是一种高效、基于比较的搜索算法,主要应用于有序的数据集合中。它通过将目标值与数据集的中间元素进行比较,不断缩小搜索范围,直到找到目标值或者确定目标值不存在。这个过程通常在计算机科学中被称为...

    算法分析与设计——二分搜索

    本文档将详细介绍算法分析与设计中的二分搜索算法,涵盖其基本概念、实现步骤、优缺点分析等方面,旨在帮助算法初学者深入了解二分搜索的原理和应用。 一、基本概念 二分搜索是一种常用的搜索算法,用于在有序数组...

    c++实现二分搜索算法分析与设计分治算法

    二分搜索算法是一种高效查找策略,它基于分治法(Divide and Conquer)思想,广泛应用于有序数据集合。在本项目中,我们利用C++编程语言实现了这一算法,以解决《算法分析与设计》一书中的相关练习题。 首先,理解...

    二分搜索算法介绍和java代码实现

    二分搜索算法是高效的搜索算法,用于在有序数组中查找特定元素的位置,通过不断缩小搜索范围来提高效率。下面是二分搜索算法的详细知识点: 概念:二分搜索算法(Binary Search)是一种高效的搜索算法,用于在有序...

    算法实现-多种编程语言实现二分搜索算法详解

    内容概要:本文详细介绍了使用Python、Java 和 C++三种主流编程语言实现二分搜索算法的方法。二分搜索算法是一种高效的查找方法,用于在有序列表中查找指定元素的位置。算法的基本思想是在每一次迭代中将当前范围...

    二分搜索算法+动态演示

    二分搜索算法是一种高效、基于比较的搜索算法,主要应用于有序数据集合中。它通过将目标值与中间元素进行比较,逐步缩小搜索范围,从而快速找到目标元素或确定其不存在。这种算法的时间复杂度为O(log n),在大量数据...

    二分搜索算法+动态演示.rar

    二分搜索算法,又称折半查找,是一种在有序数组中查找特定元素的高效搜索方法。它的基本思想是将数组分成两个部分,每次比较中间元素与目标值,根据比较结果缩小搜索范围,直到找到目标值或者搜索范围为空。二分搜索...

    二分搜索算法和快速排序算法及分治策略.doc

    首先,二分搜索算法是一种在有序数组中查找特定元素的搜索算法。它的核心思想是将数组分为两半,每次都检查中间元素,如果中间元素是目标值,则搜索结束;如果中间元素比目标值小,则在数组的右半部分继续搜索;反之...

    二分搜索算法、快速排序,算法分析与设计(完整的代码,结合例题详细解析) 全套资源,求抱走!!!

    二分搜索算法是一种基于分治策略的高效查找算法,它适用于已排序的数组。在给定的数组`a[0 : 8]={1, 8, 12, 15, 16, 21, 30, 35, 39}`中,我们可以通过二分搜索来解决以下三个问题: 1) 查找30:二分搜索首先找到...

Global site tag (gtag.js) - Google Analytics