範例:二元搜尋法 (binary search)
/* 程式功能: 二元搜尋法 (binary search) */
#include <stdio.h>
/* 搜尋x元素在A陣列中的位置 */
int BinarySearch(int A[], int x, int left, int right);
void main(){
int x; /* 欲搜尋的元素 */
int result; /* 欲搜尋的元素的位置 */
/* 排序過的陣列 */
int DATA[11] = {0, 1, 5, 6, 8, 9, 12, 14, 15, 19, 25};
/* 陣列的大小 */
/* sizeof(DATA)為44, sizeof(int)為4, 故size為11, 恰為DATA的大小 */
int size = sizeof(DATA)/sizeof(int);
/* 提示使用者輸入欲搜尋的元素 */
printf("Input the searched element: ");
scanf("%d", &x);
/* 二元搜尋法 */
result = BinarySearch(DATA, x, 0, size);
/* 印出x元素在DATA陣列中的位置 */
printf("The searched element x is at %d.", result);
}
/* 搜尋x元素在A陣列中的位置 */
int BinarySearch(int A[], int x, int left, int right) {
if (left <= right) {
int middle = (left+right)/2; /* 計算中間位置 */
/* 比較A[middle]和x的大小 */
if ( x < A[middle] ) {
return BinarySearch(A, x, left, middle-1);
}
if ( x > A[middle] ) {
return BinarySearch(A, x, middle+1, right);
}
if ( x == A[middle] ) {
return middle;
}
} /* end of if */
return -1 ; /* 未找到 */
} /* end of BinarySearch */
--Back--