C言語で書いてみました

過去の情報処理技術者試験の出題をもとにして、Cのソースを起こしてみました。

■ 線形探索(平成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;
}