我在理解如何二进制搜索char时遇到问题。我必须搜索智能手机的名称。我有这个:
typedef struct smartphone {
char name[50];
double weight;
} smartphone;
smartphone smartphone[50];
char smartphone_searched = "Xperia U";
所以,我必须二进制搜索名称" Xperia U"。有什么建议?
答案 0 :(得分:0)
首先,您需要根据智能手机对数组进行排序(以使用二进制搜索)'这样的名字:
for(int i=0; i<49; i++)
{
int minIndex = i;
for(int j=i+1; j<50; j++)
{
if(strcmp(smartphone[i].name, smartphone[j].name) > 0)
minIndex = j;
}
smartphone tmp = smartphone[i];
smartphone[i] = smartphone[minIndex];
smartphone[minIndex] = tmp;
}
然后,您将使用strcmp使用二进制搜索逻辑来查找答案。
答案 1 :(得分:0)
错误更正:
char smartphone_searched[50] = "Xperia U";
而不是
char smartphone_searched = "Xperia U";
然后使用qsort()将结构数组排序为:
static int cmp(const void *p1, const void *p2)
{
char* y1 = ((const struct smartphone*)p1)->name;
char* y2 = ((const struct smartphone*)p2)->name;
if (strcmp(y1,y2) > 0)
return -1;
else
return 1;
}
然后
qsort(smartphone, 50, sizeof(*smartphone), cmp);
然后在数组上使用二进制排序
int i=0;
int j=49;
while(i<j)
{
mid=i+j;
if(strcmp(smartphone[mid],smartphone_searched)==0)
{
printf("Found\n);
return 0;
}
else if(strcmp(smartphone[mid],smartphone_searched)>0)
i=mid+1;
else
j=mid-1;
}