【发布时间】:2020-04-03 20:10:09
【问题描述】:
一开始我以为程序运行良好,但是当我测试搜索“马”时,搜索失败。而且我注意到该程序最多只能搜索一半的数据。有谁知道为什么? 我已经添加了 qsort,但它仍然不会搜索下半部分数据。
#include <stdio.h>
#include<stdbool.h>
#include<string.h>
#include<stdlib.h>
int compare(const void *a, const void *b){
const char *ia = (const char *)a;
const char *ib = (const char *)b;
return strcmp(ia, ib);
}
int main(int argc, char argv){
char data[10][50]={"cow", "goat", "dog", "sheep", "chicken", "duck", "bird","fish", "bee", "horse"};
int size1 = sizeof(data[0]);
int n = sizeof(data) / size1;
printf("%d\n\n", n);
int i, j;
bool check = false;
char key[10];
int low = 0;
int high = n - 1;
int mid;
char temp;
for(i = 0; i<n; i++){
printf("%s\n", data[i]);
}
qsort(data, n, size1, compare);
printf("=============\n\n");
for(i = 0; i<n; i++){
printf("%s\n", data[i]);
}
system("pause");
printf("Search: "); scanf("%s", &key);
fflush(stdin);
while(low<=high){
mid = (low + high) / 2;
if(strcmp(key,data[mid])==0){
printf("Data Found ! on index - %d\n", mid);
break;
} else if(strcmp(key,data[mid])<0){
low = mid + 1;
}else {
high = mid - 1;
}
}
if(low > high){
printf("Data not found");
}
return 0;
}
【问题讨论】:
-
二进制搜索用于排序数据。你的显然没有排序。
-
我要补充一些问题,如何对字符串数据进行排序?是ASCII码吗?
-
也不要将
key与data[mid]比较两次。 -
@r3mainer 是的,这有助于对数据进行排序,但搜索仍然不起作用
标签: c binary-search