配列のバイナリ検索を実行しようとしています。すべてという文字列が出現する必要があります。私はbsearch
で試しましたが、それをどうやって行うのか分かりません。いくつかのオカレンスのバイナリ検索を実行するにはどうすればよいですか?
/* data structures */
typedef struct {
char *name;
char *value;
} acronym;
struct {
acronym *tab;
size_t size;
} acronymArray;
/* code */
char buf[256];
fgets(buf, sizeof buf, stdin);
for (size_t i = 0; i < acronymArray.size; ++i)
if (!strcmp(buf, acronymArray.tab[i].name))
printf("Found: %s\n", acronymArray.tab[i].value);
/* How to translate it with a binary search ?
Of course my array was sorted with qsort previously */
私はそれを試してみたが、それは1つの出現のためにのみ機能します。
if ((k = bsearch(k, acronymArray.tab, acronymArray.size, sizeof *acronymArray.tab, compare)))
printf("found : %s\n", k->value);
私は私の構造にブール変数«頭字語»について考え、私はわからないんだけど... これは宿題ではありません。
ありがとうございます!
もし前方/後方を見ているパーツの線形実行時間を避けたいのであれば、2つのバージョンの異なるバイナリ検索ルーチンが必要になります - 最初の一致を見つけるためのものと最後のものを見つけるもう1つのもの'std :: lower_bound'と' std :: upper_bound'をC++で使います。両方とも対数時間で行うことができます。 –
ありがとう、私はそれを試してみます。 – md5
@ Steve:代わりに、指数関数的な検索を使用するだけです。 – Vlad