#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare_n(const void *, const void *);
int compare_c(const void *, const void *);
/********/
/* main */
/********/
int main(int argc, char **argv)
{
int i1, key_n, *res_n, data_n[10] = {10, 1, 45, 20, 0, -20, 15, 90, 5, 55};
char *key_c, **res_c, *data_c[5];
for (i1 = 0; i1 < 5; i1++)
data_c[i1] = new char [10];
data_c[0] = "fish";
data_c[1] = "dog";
data_c[2] = "tree";
data_c[3] = "human";
data_c[4] = "cat";
/*
探索キー
*/
key_n = atoi(argv[1]);
key_c = argv[2];
/*
整数の場合
*/
// ソート前の出力
printf("sort前 ");
for (i1 = 0; i1 < 10; i1++)
printf("%d ", data_n[i1]);
printf("\n");
// ソートとその後の出力
qsort(data_n, 10, sizeof(int), compare_n);
printf("sort後 ");
for (i1 = 0; i1 < 10; i1++)
printf("%d ", data_n[i1]);
printf("\n");
// 探索
res_n = (int *)bsearch(&key_n, data_n, 10, sizeof(int), compare_n);
if (res_n != NULL)
printf(" %d が見つかりました\n", *res_n);
else
printf(" %d は見つかりませんでした\n", key_n);
/*
文字列の場合
*/
// ソート前の出力
printf("sort前 ");
for (i1 = 0; i1 < 5; i1++)
printf("%s ", data_c[i1]);
printf("\n");
// ソートとその後の出力
qsort(data_c, 5, sizeof(char *), compare_c);
printf("sort後 ");
for (i1 = 0; i1 < 5; i1++)
printf("%s ", data_c[i1]);
printf("\n");
// 探索
res_c = (char **)bsearch(&key_c, data_c, 5, sizeof(char *), compare_c);
if (res_c != NULL)
printf(" %s が見つかりました\n", *res_c);
else
printf(" %s は見つかりませんでした\n", key_c);
return 0;
}
/********************/
/* 2つの整数の比較 */
/********************/
int compare_n(const void *arg1, const void *arg2)
{
int *a1 = (int *)arg1;
int *a2 = (int *)arg2;
return *a1 - *a2;
}
/**********************/
/* 2つの文字列の比較 */
/**********************/
int compare_c(const void *chr1, const void *chr2)
{
char **c1 = (char **) chr1;
char **c2 = (char **) chr2;
return strcmp(*c1, *c2);
}