mysql实现二分法查找_算法之二分法查找

本文介绍了二分法检索的基本思想和实现过程,通过Java代码展示了如何在一个有序数组中使用二分查找法寻找目标值。当找到目标值时返回其位置,未找到则返回负数。此外,还提供了在ArrayList和数组上的应用示例。
摘要由CSDN通过智能技术生成

二分法检索(binary search)又称折半检索,二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组(array)中,

首先将给定值key与字典中间位置上元素的关键码(key)比较,如果相等,则检索成功;

否则,若key小,则在字典前半部分中继续进行二分法检索;

若key大,则在字典后半部分中继续进行二分法检索。

这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。

偶数个取中间2个其中任何一个作为中间元素

二分法检索是一种效率较高的检索方法,要求字典在顺序表中按关键码排序。

java 代码

成功返回所在位置,失败返回负数package ForTest;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class Arithmetic{

public static > int BinarySearch(List array, int start, int end, T key)

{

int low;

int high;

int guess;

if(array == null || start>end || start > array.size()-1 || end < 0)

{

return -1;

}

start = start < 0 ? 0 : start;

low = start-1;

end = end > array.size()-1 ? array.size()-1 : end;

high = end+1;

while (high - low > 1) {

guess = ((high - low)>>1) + low;

if (array.get(guess).compareTo(key) < 0)

low = guess;

else

high = guess;

}

if (high == end +1 )

{

return ~(end +1 );

}

else if (array.get(high).compareTo(key) == 0)

{

return high;

}

else

{

return ~high;

}

}

public static > int BinarySearch(T[] array, int start, int end, T key)

{

List stooges = Arrays.asList(array);

return Arithmetic.BinarySearch(stooges, start, end, key);

}

public static void main(String[] args) {

// TODO Auto-generated method stub

ArrayList a = new ArrayList();

Float[] b = new Float[100];

for(int i=0; i<100; i++)

{

a.add(i);

b[i] = (float) i;

}

System.out.println(""+Arithmetic.BinarySearch(a,0,1000,200));

System.out.println(""+Arithmetic.BinarySearch(b,0,100,2.f));

}

}

更多算法之二分法查找相关文章请关注PHP中文网!

相关标签:二分法查找

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值