折半查找思想的应用:
public class BinarySearch {
//将有序数组分两半,将前一部分有序的数组,放到后面
//如[1,2,3,4,5,6,7,8,9,10] 换成[5,6,7,8,9,10,1,2,3,4]
//然后对这样的数组进行查找
//测试代码
public static void main(String[] args) {
int [] array = {5,6,7,8,9,10, 1,2,3,4};
//查找3, 并打印其对应下标
System.out.println(arrange(array, 3));
}
// 查找算法
public static int arrange (int [] array, int key ){
int left =0;
int right = array.length-1;
while (left <=right ){
int middle = (left + right)/2;
if (array[middle] == key) return middle;
//如果[middle ....right]有序
if (array[middle] <=array[right]){
//如果[middle ....right]有序并且 key 在[middle ....right]中
if (array[middle] < key && key <= array[right]){
left = middle + 1;
}else{
right = middle - 1;
}
}else{//如果[left ....middle]有序并且 key 在[left ....middle]中
if (key < array[middle] && array[left] <= key){
right = middle -1;
}else{
left = middle + 1;
}
}
}
return -1;
}
}