二分查找,又稱折半查找,是一種高效的查找算法。其核心優勢在於查找速度極快,時間複雜度僅為 O(log n);但前提條件是待查找的數據序列必須是有序的(升序或降序均可)。
算法採用「分治」策略:
#include <stdio.h>
int binarySearch(int a[], int n, int key) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
int midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // 找到,返回下標
}
return -1; // 未找到
}
int main() {
int i, val, ret;
int a[8] = {-32, 12, 16, 24, 36, 45, 59, 98};
printf("原始有序序列:\n");
for (i = 0; i < 8; i++)
printf("%d\t", a[i]);
printf("\n請輸入所要查找的元素:");
scanf("%d", &val);
ret = binarySearch(a, 8, val);
if (ret == -1)
printf("查找失敗\n");
else
printf("查找成功,元素位於下標 %d\n", ret);
return 0;
}
原始有序序列: -32 12 16 24 36 45 59 98 請輸入所要查找的元素:12 查找成功,元素位於下標 1
以查找 12 為例:
整個過程僅需 2 次比較即完成查找,展現了二分查找的高效特性。
low + (high - low) / 2