二分查找是一个很好的查找方式,但是前提是必须是排好序的数组,二分查找相当于是每次都去掉一般的范围。
接下来,我们先去快速排序对数组进行排序:
public void quickSort(int[] arr){
for(int i = 0; i < arr.length-1; i++){
for(int j = 0; j < arr.length;j++){
if(arr[i] < arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
接下来,我们书写二分查找的方法:
/**
* 二分查找
* @param arr 被查找的数组
* @param key 需要被找的值
* @return 返回查找到的数值的下标,没有找到则返回-1
*/
public static int binarySearch(int[] arr,int key){
int left = 0;
int right = arr.length-1;
int mid = (left+right) / 2;
while(left <= right){
//防止数值不在数组之中
if (key < arr[left] || key > arr[right]) {
return -1;
}
if(arr[mid] == key){
return mid;
}
if(arr[mid] > key){
right = mid -1;
}
if(arr[mid] < key){
left = mid + 1;
}
}
return -1;
}
二分查找就是按照一分为二的原则,我们先取中间值,如果需要被找到的值在左边,则是让我们的数组变成左半边,以此类推,逐渐查找,直到找个那个数值,即返回下标。