为什么我的二进制搜索只能按此顺序使用if语句?

时间:2016-11-14 04:00:19

标签: c search

我想知道为什么我的二进制搜索代码无法使用此代码(它返回找到的所有内容):

int BinarySearch(int arr[], int len, int target) {
    int first = 0;
    int last = len-1;
    int mid = (first+last)/2;
    while (first <= last) {
        mid = floor((first+last)/2);            
        if (target = arr[mid]) {
            return 1;
        } else if (target < arr[mid]) {
            last = mid-1;
        } else {
            first = mid+1;
        }
    }
    return -1;
}

但以下工作。唯一的区别是while循环中if语句的顺序。

int BinarySearch(int arr[], int len, int target) {
    int first = 0;
    int last = len-1;
    int mid = (first+last)/2;
    while (first <= last) {
        mid = floor((first+last)/2);            
        if (arr[mid] < target) {
            first = mid+1;
        } else if (target = arr[mid]) {
            return 1;
        } 
        else { //arr[mid] < target
            last = mid-1;
        }           
    }
    return -1;
}

3 个答案:

答案 0 :(得分:1)

'a'

这是作业,而不仅仅是比较。这将使if (target = arr[mid]) 等于target(然后输入块,除非值为arr[mid])。

答案 1 :(得分:1)

if (target = arr[mid]) {真的吗?你的意思是==

除了提到的答案之外,=运算符会分配然后返回分配值成功时分配的值。例如。如果您执行printf("%d", (a = 10));,则会看到10已打印。因此,当您在if语句中使用赋值运算符时,它会归结为if (10)(或其他某个数字),因此您的if块将被执行。我希望很明显为什么if (a = 0)不会让你执行if块。 HTH。

答案 2 :(得分:1)

if (target = arr[mid]) 

这是错误的,因为它为目标指定了一个值 显然你想要比较,所以这样做

if (target == arr[mid])

使用双==