sttsのソースコードMemoブログ

色々やってみた結果のMemo

C言語でバイナリサーチ

C言語でバイナリサーチをするサンプルです。

#include 
#include 
#include 

static int cmp(const void *p1, const void *p2) {
	char *c1;
	char *c2;

	c1 = *(char **)p1;
	c2 = *(char **)p2;
	//printf("cmp %s - %s\n", c1, c2);
	return strcmp(c1, c2);
}
int main (int argc, char *argv[]) {

	int number = 0;
	char *list[4096];
	char buf[4096];
	FILE *fp = NULL;
	char **ret;
	int i;

	fp = fopen(argv[1], "r");
	while ( fgets(buf, sizeof(buf), fp) != NULL) {
		list[number] = strdup(buf);
		number++;
	}
	fclose(fp);
	
	qsort(list, number, sizeof(char *), cmp);

	if (argc == 3) {
		ret = bsearch(&(argv[2]), list, number, sizeof(char *), cmp);
		if (ret != NULL) {
			printf("find! %s\n", *ret);
			exit(1);
		}
	}
		
	for (i=0; i<number; i++) {
		printf("%s", list[i]);
	}
}

以下のように実行します。

$ ./a.out ソート対象の入力ファイル 検索対象の文字列

もっと高級言語を使いたい。。。