一个数组,里面的序列原本有序,现在通过平移,从某个点掐断(不确定),将前半部分平移到后半部分,构成新的序列。查找某个数值是否存在于该数组中(保证时间复杂度不超过logN)。
如:4,5,6,7,8,1,2,3 查找7是否在这个数组中。
代码如下:
package normal.algorithm;
import java.util.Scanner;
public class New_Bin_Search {
public static int Find(int[] arr1){
for(int i = 0;i< arr1.length;i++){
if(arr1[i]>arr1[i+1]){
return i+1;
}
}
return 0;
}
public static int Search(int[] array,int n,int b){
int low =0;
int high = b;
int mid;
while(low<=high){
mid =(low+high)/2;
if (array[mid]==n)
return mid;
if(array[mid]<n)
low = mid +1;
else high =mid -1;
}
return -1;
}
public static int Search1(int[] array,int n,int c){
int low =c;
int high = array.length-1;
int mid;
while(low<=high){
mid =(low+high)/2;
if (array[mid]==n)
return mid;
if(array[mid]<n)
low = mid +1;
else high =mid -1;
}
return -1;
}
public static void main(String args[]){
Scanner in = new Scanner(System.in);
int n =8;
int[] arr = new int[n];
System.out.println("请输入数值:");
for(int i =0;i<n;i++){
arr[i] = in.nextInt();
}
//找出分成有序子序列的下标
int j = Find(arr);
System.out.println(Search(arr,7,j));
System.out.println(Search1(arr,7,j));
}
}
输出结果:
3