int half(int number, vector<int> a) {
int mid = (high - low) / 2; // 錯誤:未加 low
if (number > a[mid]) {
a[low] = a[mid + 1]; // 錯誤:修改陣列內容而非索引
half(number, a);
} else if (number < a[mid]) {
a[high] = a[mid - 1]; // 同上
half(number, a);
} else if (number == a[mid]) {
return 1;
}
}
mid 計算應為 low + (high - low) / 2,防止溢出且正確定位中間。low/high。return half(number, a, low, high);。low/high 參數,而非使用全域變數。int binarySearch(const vector<int>& a, int target, int low, int high) {
if (low > high) return -1; // 未找到
int mid = low + (high - low) / 2;
if (target == a[mid]) return mid;
if (target < a[mid]) return binarySearch(a, target, low, mid - 1);
return binarySearch(a, target, mid + 1, high);
}
// 呼叫
int idx = binarySearch(vec, number, 0, vec.size() - 1);
int binarySearch(const vector<int>& a, int target) {
int low = 0, high = (int)a.size() - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (target == a[mid]) return mid;
if (target < a[mid]) high = mid - 1;
else low = mid + 1;
}
return -1;
}
邊界測試:空陣列、單元素、目標在首/尾/中間、目標不存在。