在结构数组中进行二进制搜索。

问题描述 投票:0回答:1

所以我有一个叫做jogo的结构和一个包含jogo类型变量的数组。

结构。

typedef struct
{
    int id;
    char nome[1024];
    char equipas[2][1024];
    int pont[2];
} jogo;

我想做的是通过二进制搜索找到对应的nome,并在找到nome后返回其id。

例子:我想做的是二进制搜索,找到对应的nome,并在找到nome后返回其id。

// Example of elements inside the array
jogo array[3] = {{0,ElClassico1,Barcelona,RealMadrid,2,0},
                 {1,ElClassico2,Barcelona,RealMadrid,1,3},    
                 {2,ElClassico3,Barcelona,RealMadrid,3,4}}

例如,如果我对ElClassico2这个名字进行二进制搜索 我想让二进制搜索返回1,也就是那个jogo的id.

如果有人能告诉我如何能做到这一点,我将感激不尽,因为我不明白如何能做到这一点。

c arrays structure binary-search
1个回答
0
投票

如果你想使用标准库二进制搜索,可以这样使用。

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

typedef struct
{
    int id;
    char nome[1024];
    char equipas[2][1024];
    int pont[2];
} jogo;

int jogo_compare_nome(void const *a, void const *b)
{
    return strcmp(((jogo*)a)->nome, ((jogo*)b)->nome);
}

int main(void)
{
    jogo array[3] = { 
        {0, "ElClassico1", {"Barcelona", "RealMadrid"}, { 2, 0}},
        {1, "ElClassico2", {"Barcelona", "RealMadrid"}, { 1, 3}},
        {2, "ElClassico3", {"Barcelona", "RealMadrid"}, { 3, 4}},
    };
    jogo j1 = { .nome = "ElClassico2" };
    jogo j2 = { .nome = "ElClassico7" };
    jogo* p;

    p = bsearch(&j1, array, 3, sizeof(jogo), jogo_compare_nome);
    if (p) {
        printf("Found id=%i\n", p->id);
    }
    else {
        printf("Not found!\n");
    }

    p = bsearch(&j2, array, 3, sizeof(jogo), jogo_compare_nome);
    if (p) {
        printf("Found id=%i\n", p->id);
    }
    else {
        printf("Not found!\n");
    }

    return EXIT_SUCCESS;
}

无论如何,请记住,二进制搜索需要按搜索键排序的序列(好吧,按键分区,但这是挑剔)。你可以使用 qsort() 搜索前。

对了,那些1KB的数组要求动态分配内存(我的看法)。

© www.soinside.com 2019 - 2024. All rights reserved.