15、二分查找法
注意,这个是查找算法,不是排序算法,这里面返回的是数组下标。
二分查找法(折半查找):前提是在已经在排好序的数组中,通过将带查找的元素与中间索引值对应的元素进行比较,若大于中间索引值对应的元素,去右半部分查找,否则,去左半部分查找。以此类推,直到找到为止。找不到返回一个负数(一般是-1)。
所以我们需要在一个已经排好的数组中来查找下标。记不记得”/“除法符号,这个除出来是整数,或者n>>>2二进制向右移动2位,最高位补0,一会会用到,后面的方法是将start加end之后除以二的快速方法。
设有这样一个数组:[10,20,50,65,88,90],我们要找88,则定义start下标为0,end下标为5,(0+5)/2=2,50<88,start = 2+1,(3+5)/2=4,88==88,此时不用再找了,直接结束。
代码演示:
public class a
{
public static void main(String[] args)
{
int[] num = {10, 20, 50, 65, 88, 90};
int key = binarySearch(num, 88);
System.out.println(key);
}
public static int binarySearch(int[] num, int key)
{
int start = 0 , end = num.length-1 , middile;
while(end >= start)
{
middile = (end + start) / 2;//或者这样写:middile = (end + start) >>> 2;
if(num[middile] > key)
end = middile;
else if(num[middile] < key)
start = middile;
else
return middile;
}
return -1;
}
}