■ 線形探索(平成16年春期午前問15)
■ 2分探索(平成11年春期午前問29)
#include <stdio.h>
/* 線形探索 */
int linear_search(int x, int *array, int size)
{
int k;
for (k = 0; k < size; k++) {
if (*(array+k) == x) return k;
}
return -1;
}
/* 二分探索 */
int binary_search(int x, int *array, int size)
{
int lo, hi, k;
lo = 0;
hi = size - 1;
while (lo <= hi) {
k = (lo + hi) / 2;
if (*(array+k) < x) lo = k + 1;
else if (*(array+k) > x) hi = k - 1;
else return k;
}
return -1;
}
/* 配列の内容を表示 */
void print_array(int *array, int size)
{
int i;
for (i = 0; i < size; i++)
printf("%d ", *(array+i));
putchar('\n');
}
/* メイン ルーチン */
main()
{
int A[] = { 1, 3, 4, 5, 6, 7, 9, 11, 12, 15, 18, 20, 21, 25 };
int x, y;
int N = sizeof(A) / sizeof(A[0]);
print_array(A, N);
printf("探策対象:");
scanf("%d", &x);
printf("線形探索→");
y = linear_search(x, A, N);
if (y != -1) printf("見つかりました:%d 番目\n", y + 1);
else printf("見つかりません\n");
printf("二分探索→");
y = binary_search(x, A, N);
if (y != -1) printf("見つかりました:%d 番目\n", y + 1);
else printf("見つかりません\n");
return 0;
}