我实现了这种二进制搜索算法,目的是找到数组中包含的所需字符。考虑到ASCII表[if(searchElement>arrayChar[mid]…etc],我尝试用标准的方式进行"if"one_answers"else"的比较。这似乎不起作用,所以我意识到这可能与字符串比较有关。我现在使用函数strcmp并使用其返回值进行比较:
(如果字符串1<字符串2->为负值。如果字符串1>字符串2->为正值。如果字符串1==字符串2-<为0。(
但似乎效果不佳。
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
int binarySearch(int arraySize, char arrayChar[]) {
// Variable declaration;
char searchElement[2];
int startingPoint = 0, endingPoint = arraySize - 1;
// Input for desired search element;
printf("nSearch for: ");
scanf(" %c", &searchElement);
while (startingPoint <= endingPoint) {
int mid = (startingPoint + endingPoint) / 2;
if (strcmp(searchElement, arrayChar[mid]) == 0) {
return mid;
}
else if (strcmp(searchElement, arrayChar[mid]) < 0)
endingPoint = mid - 1;
else {
if (strcmp(searchElement, arrayChar[mid]) > 0)
startingPoint = mid + 1;
}
}
return -1;
}
int main() {
// Array declaration;
char randomCharArray[7] = {'a', 'c', 'e', 'f', 'f', 'g', 'h'};
// Calling binarySearch() ;
if (binarySearch(6, randomCharArray) == -1) printf("Element not found!");
else printf("Element found in [%d] .", binarySearch(6, randomCharArray));
return 1;
}
您似乎在区分单个char
值和字符串时遇到了问题,因为字符串是以值0结尾的连续char
值序列。单个char
值对可以与标准关系和等式测试运算符(<
、>
、==
、等(进行比较。字符串对可以通过strcmp()
函数进行比较无法将单个char
的内容直接与字符串进行比较,而且您也没有字符串,因为binarySearch()
的searchElement
的内容和main()
的randomCharArray
的内容都不是以null结尾的。
这就引出了我的建议1:使searchElement
成为char
,而不是数组,因为您知道您只需要它来表示单个char
:
char searchElement;
完成后,您现在可以(建议2(通过标准运算符将searchElement
的值与arrayChar
的元素进行比较,正如您所说的最初尝试的那样
// with 'searchElement' as a char, not a char[]:
if (searchElement == arrayChar[mid]) {
或者,如果将searchElement
保留为一个数组,则可以使用searchElement[0]
访问其第一个char
进行比较。