在數組中使用二分法查找,數組二分法查找
package com.db2;
import java.util.Arrays;
/**
* 二分法查找
*
* @author denny 使用二分法查找的前提數組已經排過序
*
*/
public class Demo4 {
public static void main(String[] args) {
int[] arr = { 3, 1, 8, 2, 9, 100, 33, 22, 11, 18, 14, 17, 15, 3 };
// 使用Arrays.sort()排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// 返回結果
//int index = brinarySearch(arr, 99);
int index = brinarySearch_2(arr, 11);
System.out.println("index=" + index);
}
/*
* 二分法查找一返回下標如果是-1就說明沒有
*/
public static int brinarySearch(int[] arr, int key) {// 數組和要查找的數
int min = 0; // 最小的下標
int max = arr.length - 1;// 最大的下標
int mid = (min + max) / 2;// 中間的下標
while (arr[mid] != key) {
if (key > arr[mid]) { //比中間數還在
min = mid + 1; //最小的下標=中間下標加一
} else if (key < arr[mid]) {//比中間數還小
max = mid - 1; //最大的下標=中間下標-1
}
if(max<min){
return -1;
}
mid=(min+max)/2; //再次計算中間下標
}
return mid;
}
/*
* 二分法查找一返回下標如果是-1就說明沒有
*/
public static int brinarySearch_2(int[] arr, int key) {// 數組和要查找的數
int min = 0; // 最小的下標
int max = arr.length - 1;// 最大的下標
int mid = (min + max) / 2;// 中間的下標
while(min<=max){
if(key>arr[mid]){
min=mid+1;
}else if(key<arr[mid]){
max=mid-1;
}else{
return mid;
}
mid=(min+max)/2;
}
//沒找到
return -1;
}
}