C:二进制搜索字符(名称)
C: Binary Search for Char (name)
我在理解如何对 char 进行二进制搜索时遇到问题。我必须搜索智能手机的名称。我有这个:
typedef struct smartphone {
char name[50];
double weight;
} smartphone;
smartphone smartphone[50];
char smartphone_searched = "Xperia U";
因此,我必须对名称 "Xperia U" 进行二进制搜索。有什么建议么?
首先,您需要根据智能手机的名称对数组进行排序(以使用二进制搜索),如下所示:
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 的二进制搜索逻辑来查找答案。
纠错:
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;
}
我在理解如何对 char 进行二进制搜索时遇到问题。我必须搜索智能手机的名称。我有这个:
typedef struct smartphone {
char name[50];
double weight;
} smartphone;
smartphone smartphone[50];
char smartphone_searched = "Xperia U";
因此,我必须对名称 "Xperia U" 进行二进制搜索。有什么建议么?
首先,您需要根据智能手机的名称对数组进行排序(以使用二进制搜索),如下所示:
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 的二进制搜索逻辑来查找答案。
纠错:
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;
}