C:二进制搜索字符(名称)

时间:2015-02-02 13:37:26

标签: c search binary char

我在理解如何二进制搜索char时遇到问题。我必须搜索智能手机的名称。我有这个:

typedef struct smartphone {
    char name[50];
    double weight;
} smartphone;

smartphone smartphone[50];
char smartphone_searched = "Xperia U";

所以,我必须二进制搜索名称" Xperia U"。有什么建议?

2 个答案:

答案 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;
}