PTA 二分法查找

前提:數組中的數字是有序的,如從小到大,或從大到小。

/*
    二分法搜索
*/
#include <stdio.h>

int main(void)
{
    const int length = 100;
    int num[length]; // 數組聲明

    int i;
    for ( i=0; i<length; i++ ) // 數組賦值
    {
        num[i] = i;
    }

    for ( i=0; i<length; i++ ) // 遍歷數組並且顯示
    {
        printf("%d ", num[i]);
    }

    printf("\n");

    int k;
    scanf("%d", &k); // 輸入一個數字

    int left = 0;
    int right = length - 1;
    int ret = -1;

    while ( right >= left ) // 注意這裏的循環條件
    {
        int mid = ( left + right ) / 2;

        printf("%d ", num[mid]);

        if ( num[mid] == k )
        {
            ret = mid;
            break;
        }
        else if ( num[mid] > k )
        {
            right = mid - 1;
        }
        else
        {
            left = mid + 1;
        }
    }

    printf("\n");

    if ( ret != -1 )
    {
        printf("%d在第%d位上\n", k, ret);
    }
    else
    {
        printf("not found !\n");
    }

    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章