/*
* 二分搜索算法用于针对已排序的集合进行搜索。
它的原理是:
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语言动态实现二分搜索算法,可以清楚的看到算法之行的全部过程。
设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j。
这是一个动态规划的二分搜索算法的程序 内容包括注释 及源代码 直接下载复制就可运行 其中还包含一个简易的数据生成器
大整数算法和二分搜索算法大整数算法和二分搜索算法大整数算法和二分搜索算法大整数算法和二分搜索算法大整数算法和二分搜索算法大整数算法和二分搜索算法大整数算法和二分搜索算法
二分搜索算法、快速排序,算法分析与设计(完整的代码,结合例题详细解析) 全套资源,求抱走!!! 1、给定数组a[0 : 8]={1, 8, 12, 15, 16, 21, 30, 35, 39}。采用二分搜索算法完成下述任务: 1)查找是否有元素30...
用java实现的二分搜索算法,能够同态的体现出搜索的过程
这是采用递归分治算法写的二分搜索算法, 是为上机考试准备的,呵呵呵
将优化二分搜索算法应用于全区视电阻率计算,以期提高计算精度和运算效率。以均匀全空间回线源中心的瞬变响应为基础,探讨全空间磁感应强度垂向分量Bz及其时间变化率Bz/T核函数曲线特征,推导晚期视电阻率表达式。...
请大家积极的来我这儿下载,本资源是对二分搜索算法的实现,java语言编写。大家要是觉得我的资源好,多来我家下载,有什么建议多提出来,大家共同进步。
本文档详细描述了算法分析与设计中,二分搜索算法的详尽解释,适合算法初学者。
数值算法课程:二分搜索算法+动态演示,C语言源码+flash开发的swf
设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j。当搜索元素在数组中时,I和j相同,均为x在数组中的位置。
二分搜索算法的实现,整合了冒泡排序,虽然用的是很常规的东西,但是是自己认真在做的,算是自己程序之路上的一个小小收获吧。
二分查找算法