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
Sample Output