C言語関係掲示板

過去ログ

No.275.二分探索プログラム

[戻る] [ホームページ]
No.1651

二分探索プログラムが分かりません
投稿者---maki(2002/06/03 15:18:30)


構造体を使った二分探索のプログラムが出来ません。誰か教えてください

No.1657

Re:二分探索プログラムが分かりません
投稿者---かずま(2002/06/03 23:16:57)


> 構造体を使った二分探索のプログラム

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

struct Score {
    const char *name;
    int score;
};

struct Score table[5] = {
    { "Alice",    70 },
    { "Bob",     100 },
    { "Charlie",  45 },
    { "David",    68 },
    { "Emily",    99 },
};

int compare(const void *a, const void *b)
{
    return strcmp(*(char **)a, *(char **)b);
}

void find(const char *name)
{
    struct Score key, *sp;

    key.name = name;
    sp = bsearch(&key, table, 5, sizeof(*table), compare);
    if (sp != NULL)
        printf("%s %d\n", sp->name, sp->score);
    else
        printf("%s: not found\n", key.name);
}

int main()
{
    find("David");
    find("Jack");
    return 0;
}



No.1658

Re:二分探索プログラムが分かりません
投稿者---かずま(2002/06/04 13:51:52)


バグがありました。
int compare(const void *a, const void *b) の中の
return strcmp(*(char **)a, *(char **)b); は、
return strcmp(((struct Score *)a)->name, ((struct Score *)b)->name);
に訂正します。
たまたま、name が構造体の先頭にあったので、元のままでも動いていました。