二分查找算法是在有序数组中用到的较为频繁的一种算法,譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为:
1.第一步查找中间元素,即5,由于5<6,则6必然在5之后的数组元素中,那么就在{6, 7, 8, 9}中查找,
2.寻找{6, 7, 8, 9}的中位数,为7,7>6,则6应该在7左边的数组元素中,那么只剩下6,即找到了。
- class IndexSearch{
- public static void main(String[] args) {
- int[] arr = {1,2,3,4,5,6,7,8,9};
- int key = 9;
- int index = binarySearch(arr,key);
- System.out.println(key+"在数组中的索引值为:"+index);
- }
- //演示二分查找法,对于有序数组
- public static int binarySearch(int[] arr,int key){
- //需要定义三个变量,用于记录住角标的变化。
- int min,max,mid;
- min = 0;
- max = arr.length-1;
- //只要min和max之间有距离,就有了折半的可能,而且有可能折半多次,使用while循环。。
- while(min<=max){
- //获取中间角标。
- mid = (max+min)/2; //mid = (max+min)>>1;
- //获取中间角标上的元素和key进行比较。
- //来确定min和max的新值。或者叫做,确定新的查找范围。
- if(key>arr[mid])
- min = mid + 1;
- else if(key<arr[mid])
- max = mid - 1;
- else
- return mid;
- }
- return -1;
- }
- }
复制代码
|
|