public class TextSort2 {
public static void main(String[] args) {
int[]
arrs={13,26,27,34,52,88,323}; //數組必須為有序數組
System.out.println(find(arrs,323));
}
折半查找:
數組必須為有序數組
思路:先找到數組中間位置的數,用要查詢的數與其比較:
如果大于中間數,則往數組中間數的較大一方(右側查找)
如果小于中間數,則往數組中間數的較小一方(左側查找)
如果等于中間數,則直接返回該位置
如果沒找到,返回-1
@param arrs 有序數組
@param key 要查詢的數
private static int find(int[] arrs,int key){
int min=0; //定義最小數索引為0
int max=arrs.length-1; //定義最大數索引為數組長度-1
int
middle; //定義中間數
while(true){
middle=(min+max)/2; //每次得到中間數
if(key==arrs[middle]){
//如果key等于中間數
return
middle;
}else if(key>arrs[middle]){
min=middle+1;
//設置最小位置min為middle+1,并從這個位置往后查找
}else if(key<arrs[middle]){
max=middle-1;
//設置最大位置max為middle-1,并從這個位置往前查找
}
if(max<min){
//如果最小位置min,都大于最大位置索引max,則沒找到
return -1;
}
}
}
}