二分查找循环有序数组

二分法查找循环有序数组中的某一元素,如果存在返回该值,否则返回 -1。
int getNumFromLooOrderArray(int arr[], int target, int left, int right) { while (left < right) { int mid = left + (right - left) / 2; cout<<"left: " << left << " right: " << right << endl; if (arr[mid] == target) { return mid; } if (arr[mid] < arr[right]) { // mid 右边有序 if (target > arr[mid] && target <= arr[right]) { left = mid + 1; } else { right = mid - 1; } //if (target > arr[right]) { // right = mid - 1; //} } else{ // mid 左边有序 if (target < arr[mid] && target >= arr[left]) { right = mid - 1; } else { left = mid + 1; } } } if (target == arr[left]) { return left; } return -1; } int main() { int dp[6]={4,5,6,1,2,3}; cout << getNumFromLooOrderArray( dp, 1,0,5 ); }

 

//使用二分法查找循环有序数组的最小值
int getSubScriptFromArray(int arr[], int left, int right){
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (arr[mid] >arr[right]) {
            //左边有序, 最小值在右边,不包含mid
            left = mid + 1;
        } else if (arr[mid] < arr[right]) {
            // 右边有序, 最小值在左边,可能是mid
            right = mid;
        } else{
            right = right - 1;
        }
    }
    return arr[left];
}

  

 

 

posted @ 2020-09-08 11:13  肉松松松松  阅读(370)  评论(0)    收藏  举报