二分查找---如何在一个严格递增的序列A中找到给定的数x

二分查找—如何在一个严格递增的序列A中找到给定的数x(两种差不多的代码)
二分法好多这种这种题,是基础中的基础,要掌握好。(二分法多用非递归实现)

第一个是标答:

#include <stdio.h>

int binarySearch(int a[],int left,int right,int x);
int main(void) {
    const int n = 10;
    int A[n] = {1,3, 4, 6, 7, 8, 10, 11, 12, 15};
    printf("%d\n", binarySearch(A, 0, n - 1, 6));
    return 0;
}

int binarySearch(int a[], int left, int right,int x) {
    int mid;//中点
    while(left<=right)//如果left>right就没办法形成闭区间了
    {
        mid = (left + right )/2;//取中点
        if(a[mid] == x) return mid;//找到x,返回下标
        else if(a[mid]  < x ){
            left = mid + 1;//往【mid + 1,right】中找
        } else{
            right = mid -1 ;
        }
    }
    return -1;//查找失败。返回-1
}

``

#include <stdio.h>

int binarySearch(int a[],int left,int right,int x);
int main(void) {
    const int n = 10;
    int A[n] = {1,3, 4, 6, 7, 8, 10, 11, 12, 15};
    printf("%d\n", binarySearch(A, 0, n - 1, 6));
    return 0;
}

int binarySearch(int a[], int left, int right,int x) {
    int mid = left + (right - left )/2;
    while(a[mid] != x)
    {
        if(a[mid]  < x ){
            left = mid + 1;
            mid = left + (right - left )/2;
        } else{
            right = mid -1 ;
            mid = left + (right - left )/2;
        }
        if(right == left + 1 && (a[left] != x && a[right]!=x))
        {
            return -1;
        }
    }
    return mid;
}

猜你喜欢

转载自blog.csdn.net/J_aSON_/article/details/107566400
今日推荐