编辑代码

#include <stdio.h>
int BinarySearch(int array[], int n, int value)
{
    // 从数组下标0开始起
    int left = 0;
    int right = n - 1;
    //循环条件,二分查找,左边要小于右边
    while (left <= right)
    {
        //防止溢出,移位也更高效。同时,每次循环都需要更新。
        int middle = left + ((right - left) >> 1);  
        // 中间值比查找值要小,则在左边找,这里会和以往写的不同;
        // 原本应该是大于,但这里小于,是因为所给数组是从大到小,查找值比中间值小则在左边找。
        if (array[middle] < value)
        {
            right = middle - 1; 
        }
        //同理 中间值比查找值要大,则在右边找
        // 
        else if(array[middle] > value)
        {
            left = middle + 1;
        }
        else
            return middle;
    }
    return -1;  // 否则没找到要查找的值。
}

int main () {
    int arr[] = {85, 63, 52, 34, 25, 17, 6};
    int num = sizeof(arr) / sizeof(int);
    int value = 6;
    int index = BinarySearch(arr, num, value);
    if (index < 0) {
        printf("查找元素值为 %d 不存在\n", value);
    } else {

        printf("查找元素值为 %d 存在,在数组中的下标是 %d\n", value, index);
    }
    return 0;
}