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