标签:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2
4 5 6 7
might become 4
5 6 7 0 1 2
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
int binaryfind(int* A, int first,int last, int target){ while (first<=last){ int mid = (first + last) / 2; if (A[mid] == target) return mid; else if (A[mid] < target) first = mid + 1; else last = mid - 1; } return -1; } int search(int A[], int n, int target) { int first = 0; int last = n - 1; if (A[first] <= A[last]) return binaryfind(A, first, last, target); int idx = -1; while (first<=last){ int mid = (first + last) / 2; if (A[first] <= A[mid]){ if (target <= A[mid]){ //注意等号的限定条件 idx = binaryfind(A, first, mid, target); if (idx!=-1) break; } first = mid + 1; } else{ if (target >= A[mid]){ idx = binaryfind(A, mid, last, target); if (idx != -1) break; } last = mid - 1; } } return idx; }
Search in Rotated Sorted Array
标签:
原文地址:http://blog.csdn.net/li_chihang/article/details/44403195