103. 二分搜尋法

I'm a slow walker, but I never walk backwards.

Task Description
二分搜尋 (Binary Search) 是取已排序資料的中間索引的值,來確認是否為要搜尋的數,
若不是,則將資料以中間索引分為兩半。此時便比較待搜尋的值與中間索引的值的大小,
若比較小,則選擇較小的那一半資料,反之亦然。
接著再繼續從一半的資料中取中間索引的值做比較,重複以上的步驟,直到找到為止。
題目給定一個排序好的陣列,試以二分搜尋法撰寫函示,在此陣列中搜尋出目標值的位置,並回傳結果。

Hint

binarysearch.h

打上 function header 以及相關的設定。

int binarysearch(int data[], int search, int n);

binarysearch.c

撰寫程式碼後對應上傳。

#include "binarysearch.h"
int binarysearch(int data[], int search, int n) {
    / add your code /
}

main.c

這個檔案無法更改也無須上傳。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include "binarysearch.h"
 
int main() {
    int search, ans;
    int data[] = {3, 7, 14, 20, 23, 32, 41, 44, 56, 57, 73, 89, 93};
 
    scanf("%d", &search);
    ans = binarysearch(data, search, sizeof(data) / sizeof(int));
    if (ans < 0) {
        printf("找不到 %d\n", search);
    }
    else {
        printf("在第 %d 筆資料找到 %d\n", ans + 1, search);
    }
 
    return 0;
}

Input Format
每筆測資為任一正整數。
Output Format
若為data陣列中的值,請回傳該數在第幾個位置
若不為data陣列的值,請回傳-1。
Sample Input

1
20

Sample Output

1
在第 4 筆資料找到 20

Submit

Login

Testdata Set

Download Testdata