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.

    int rotateSearch(int A[], int n, int target){
        int begin = 0;
        int end = n;
        while(begin < end){
            int m = begin + (end - begin)/2;
            if (A[m] == target) return m;
            if (A[m] >= A[begin]){  //left longer
                if (A[begin] <= target && target < A[m]){ //middle left
                    end = m;
                }else{ 
                    begin = m + 1;
                }
            }else{ //right longer
                if (target > A[m] && target <= A[end -1]){ //middle right
                    begin = m + 1;                
                }else{
                    end = m;
                }    
            }
        }
        return -1;
    }

 

posted @ 2013-09-15 15:15  一只会思考的猪  阅读(180)  评论(0编辑  收藏  举报