前提条件 :已排序的数组中查找
二分查找 的基本思想是 :首先确定该查找区间的中间点位置: int mid = (low+upper) / 2;然后将待查找的值与中间点位置的值比较:若相等,则查找成功并返回此位置。若中间点位置值大于待查值,则新的查找区间是中间点位置的左边区域。若中间点位置值小于待查值,则新的查找区间是中间点位置的右边区域。下一次查找是针对新的查找区间进行的。
步骤:
第一步,先用之前学过的排序方法将数组按升序排序
第二步,取中间数,中间数大于要找的数,找中间数左半部分,负责找右半部
第三步:重复第一步和第二步,直到找到数据或者比较完所有数据。
Java代码
这里排序可以看我之前写的文章
以下代码为方便复制粘贴
public class BinarySearch { public static void main(String[] args) { int[] array = new int[]{0,53,63,38,71,25,22,11,95,38}; //先排序,这里用的是 冒泡排序 int[] sort = BubbleSort.sort(array); System.out.println(Arrays.toString(sort)); int search = search(sort, 53,0,sort.length-1); System.out.println(search); } public static int search(int[] array,int ele,int low,int high){ while (low <= high){ //找到中间值 int mid = (low + high) / 2; if(array[mid] == ele){ return mid; }else{ //如果中间值小于要查找的值,去右半部分继续查找;负责去左半部分去查找 if(array[mid] < ele){ low = mid++; }else{ high = mid--; } } } return -1; } }