一、二分法檢索過程
二分法檢索(binary search)又稱折半檢索,二分法檢索的基本思想是設數組中的元素從小到大有序地存放在數組(array)中(註:二分法查找的關鍵,首先數組元素必須從小到大有序排列),(1)首先將給定值 key 與數組中間位置上元素的關鍵碼(key)比較,如果相等,則檢索成功; (2)否則,若 key 小,則在數組前半部分中繼續進行二分法檢索; (3)若 key 大,則在數組後半部分中繼續進行二分法檢索。 這樣,經過一次比較就縮小一半的檢索區間,如此進行下去,直到檢索成功或檢索失敗。 二分法檢索是一種效率較高的檢索方法。
以下是利用二分法查找數組【7,8,9,10,12,20,30,40,50,80,100】中元素10的索引的圖示過程:
二、二分法查找實例
例:查找數組{ 30,20,50,10,80,9,7,12,100,40,8}中20的索引
1.代碼如下:
package cn.pxy.test;
import java.util.Arrays;
/**
* 冒泡排序
* @author 胖鹹魚
*
*/
public class Test {
public static void main(String[ ] args) {
int[ ] arr = { 30,20,50,10,80,9,7,12,100,40,8};
int searchWord = 20; // 所要查找的數
Arrays.sort(arr); //二分法查找之前,一定要對數組元素排序
System.out.println(Arrays.toString(arr));
System.out.println(searchWord+"元素的索引: "+binarySearch(arr,searchWord));
}
public static int binarySearch(int[ ] array, int value){
int low = 0;
int high = array.length - 1;
while(low <= high){
int middle = (low + high) / 2;
if(value == array[middle]){
return middle; //返回查詢到的索引位置
}
if(value > array[middle]){
low = middle + 1;
}
if(value < array[middle]){
high = middle - 1;
}
}
return -1; //上面循環完畢,說明未找到,返回-1
}
}
2.運行結果