Search in Rotated Sorted Array

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.

解题思路: 题目中数组没有重复,则比较A[mid]与A[end]来确定mid所处的位置;然后根据二分查找来修正st和en;确定唯一的情况;

代码:

  1. int search(int A[], int n, int target) {
  2. if(n<=0) return -1;
  3. int st = 0;
  4. int en = n-1;
  5. while(st<=en) {
  6. int mid = st + ((en-st)>>1);
  7. if(A[mid] == target) {
  8. return mid;
  9. }
  10. if(A[mid]>A[en]) {
  11. if(A[mid] > target && target>=A[st]) { // 不要忘记等号
  12. en = mid - 1;
  13. } else {
  14. st = mid + 1;
  15. }
  16. } else {
  17. if(A[mid] < target && target <= A[en]) { //不要忘记等号
  18. st = mid + 1;
  19. } else {
  20. en = mid - 1;
  21. }
  22. }
  23. }
  24. return -1;
  25. }

递归实现:

  1. int search(int A[], int n, int target) {
  2. return search(A,0,n-1,target);
  3. }
  4. int search(int A[],int start,int end,int target) {
  5. if(start>end) return -1;
  6. int mid = start + ((end - start) >> 1); // + has high priority than >>
  7. int num1 = A[start];
  8. int num2 = A[mid];
  9. int num3 = A[end];
  10. if(num2 == target) return mid;
  11. if(num1 <= num2) {
  12. if(num1 > target || target > num2) {
  13. return search(A,mid+1,end,target);
  14. } else {
  15. return search(A,start,mid-1,target);
  16. }
  17. }
  18. if(target < num2 || target > num3)
  19. return search(A,start,mid-1,target);
  20. return search(A,mid+1,end,target);
  21. }
posted @ 2014-09-07 13:33  purejade  阅读(89)  评论(0编辑  收藏  举报