折半查找也叫二分法查找,即对数组二分取中间值和key比较key如果大于中间值,那么key一定在大的那一半,再对这一半进行二分,如此下去
它的特点是很快速高效率
缺点是要求数组是有序的
面试的时候会考到一种相关题型,即让你把一个数插入到一个有序的数组中,并且保证数组还是有序的。
下面是折半查找代码
- /*
- 折半查找
- */
- class ArrayTest02
- {
- public static void main(String[] args)
- {
- /*
- int[] arr = {3,1,5,4,7,9};
- int index = getIndex(arr,7);
- System.out.println("index = "+index);
- */
- int[] arr = {2,4,7,9,11,35,56};
- int index = halfSearch_2(arr,5);
- System.out.println("index = "+index);
- }
- //折半查找:可以提高效率。
- //前提条件:该数组是有序的从大到小或者从小到大。
- public static int halfSearch(int[] arr, int key)
- {
- int min,mid,max;
- min = 0;
- max = arr.length-1;
- mid = (min+max)/2;
- while(key!=arr[mid])
- {
- if (key>arr[mid])
- min = mid+1;
- else if (key<arr[mid])
- max = mid-1;
- if (max < min)
- return -1;
- mid = (min + max)/2;
- }
- return mid;
- }
- //折半查找的第二种方式。
- public static int halfSearch_2(int[] arr, int key)
- {
- int min,mid,max;
- min = 0;
- max = arr.length-1;
- while (min <= max)
- {
- mid = (min + max)/2;
- if(key>arr[mid])
- min = mid+1;
- else if(key<arr[mid])
- max = mid-1;
- else
- return mid;
- }
- return -1;
- }
- //定义一个遍历查找数组中任意元素的方法。
- //获取key第一次出现在数组中的位置。
- //如果返回值为-1,证明该key在数组中不存在。
- public static int getIndex(int[] arr, int key)
- {
- for (int x=0; x<arr.length; x++)
- {
- if (key == arr[x])
- return x;
- }
- return -1;
- }
- }
复制代码
|
|