一个升序数组选择一个切点,将切点左边的数字统一拿到数组的最后。
如:12345 → 34512
求此时某个数在数组中存在 ? 下标 : -1
public static int find(int[] arr, int n) {
if(arr.length == 0) return -1;
return find(arr, 0, arr.length - 1, n);
}
public static int find(int[] arr, int start, int end, int n) {
if(end < start) return -1;
int middle = (start + end) / 2;
if(arr[middle] == n) return middle;
// mid右边有序
if(arr[middle] < arr[end]) {
if(n > arr[middle] && n < arr[end]) {
return find(arr, middle + 1, end, n);
} else {
return find(arr, start, middle - 1, n);
}
}
// mid左边有序
if(arr[middle] > arr[start]){
if(n > arr[start] && n < arr[middle]) {
return find(arr, start, middle - 1, n);
} else {
return find(arr, middle + 1, end, n);
}
}
return -1;
}