我想知道为什么我的二进制搜索代码无法使用此代码(它返回找到的所有内容):
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;
}
答案 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])
使用双==