在一個有序的旋轉陣列中,查詢給定值
阿新 • • 發佈:2019-01-10
思路一:
因為陣列有序,經過旋轉後,陣列保持區域性有序。因此可以用二分查詢。
bool search(int A[], int n, int target) { int start=0; int end=n-1; while(start<=end){ int mid=(start+end)>>1; if(target==A[mid]) return true; if(A[mid]==A[start]&&A[mid]==A[end]){ //此時給定值可能在左邊,也可能在右邊。因此要遍歷整個陣列。 或者++start,--last. /* for(int i=0;i<n;i++){ if(target==A[i]) return true; } return false;*/ start++; end--; }else if(A[start]<=A[mid]){ //左邊有序 if(target<A[mid]&&target>=A[start]) end=mid-1; else start=mid+1; }else if(A[mid]<=A[end]){ //右邊有序 if(target>A[mid]&&target<=A[end]) start=mid+1; else end=mid-1; } } return false; }