?? 從數(shù)組中查找特定數(shù)據(jù)的最簡(jiǎn)單辦法就是遍歷數(shù)組中所有的元素,這種查找方式稱(chēng)為線性查找。對(duì)于小型數(shù)組或者是沒(méi)有經(jīng)過(guò)排序的數(shù)組的可以采用這樣的辦法,對(duì)于已經(jīng)排序的數(shù)組可以采用高效的二叉查找算法。該算法查找數(shù)組中位于中間位置的元素,并將其與查找值比較,如果兩者相等就返回該元素的索引,否則將問(wèn)題化簡(jiǎn)為查找元素的一半來(lái)處理。
??? class ArrayFinder{
? public static void print(int[] array,int middle){
???? for(int i=0;i<array.length;i++){
??????? System.out.print(array[i]);
??????? if(i == middle)System.out.print("*");
??????? System.out.print(" ");
???? }
???? System.out.println();
? }
?
? public static int indexOf(int[] array,int value){
???? int low = 0;
???? int high = array.length-1;
???? int middle;
???? while(low <= high){
??????? middle = (low + high)/2;
??????? print(array,middle);
??????? if(array[middle] == value) return middle;
???????
??????? if(value < array[middle]) //要比較的值比中間值小
?????????? high = middle +1;
??????? else
?????????? low = middle - 1;
???? }
???? return -1;
? }
? public static void main(String[] args){
??? int[] array = new int[]{1,2,3,4,6,9,12};
??? System.out.println("location of 13: "+indexOf(array,4));
? }
?
}
Result :
D:\jcode>javac ArrayFinder.java
D:\jcode>java ArrayFinder
1 2 3 4* 6 9 12
location of 13: 3