二分法查找

来源:互联网 发布:中信证券待遇 知乎 编辑:程序博客网 时间:2024/06/04 19:23

二分法查找 ,只能针对于有序数据进行查找,无序数据无法使用二分法查找。

有序数组:{1,2,3,4,4,5,6,7,7,8} 这个可以使用二分法查找

无序数组:{33,3,45,6,575,76,67,676} 这个无法使用二分法查找


二分法查找规则:

如,查询数组{1,3,4,5,6,7,8,8,43,54,55,77,88,99}中的77所在下标,查找方法为

1、获取下标最小值  0

2、获取下标最大值 array.length-1

3、获取中间的下标,也就是(最小值 +最大值 )/2

4、拿中间下标的值 对比 77,发现中间值 < 77,那么,更改最小值 = 中间值+1,最大值 不变

5、获取中间下标(最小值 +最大值 )/2

6、再次拿数组的中间下标值 对比77,按上叙方法进行对比,依次类推,直到对比完为止


代码如下:

public static void main(String[] args){int[] array = {1,3,4,5,6,7,8,8,43,54,55,77,88,99};int index = findIndex(array,99);System.out.println("查找到值的下标为:"+index);}public static int findIndex(int[] array,int num){//最小值 int min = 0;//最大值 int max = array.length-1;//中间下标值 int midd = (max+min)/2;//用以结束循环,防止死循环int end = max;//如果查找的数组不等于数组的中间值,则进行循环while(num != array[midd]){//如果数组的中间值大于查找值,则将最大值= 中间下标值-1if(array[midd] > num){max = midd-1;}else{//如果数组的中间值小于查找值,则将最小值= 中间下标值+1min = midd+1;}//重新获取中间值midd = (max + min)/2;//获取结束值 ,因为二分法是取中间值进行对比,相当于除于2,所以结束值也相应除以2end = end /2;//如果结束值 等 于0了,说明要查找的值不存在于数组中,没有必须再次循环了,否则,会进入死循环if(end == 0){return -1;}}//返回查找到值的下标return midd;}

结果:

查找到值的下标为:13


0 0
原创粉丝点击