查找:折半找
约 10 分钟
数据有序时,可以用折半查找(二分)。每次看正中间那个数:正好是目标就找到了;目标比它小,答案只可能在左半边;比它大就在右半边。这样每一步都把范围砍掉一半,快得惊人。像查字典,翻到中间看一眼就知道往前还是往后翻。
#include <iostream>
using namespace std;
int main() {
int a[7] = {1, 3, 5, 7, 9, 11, 13}, n = 7, target = 9;
int lo = 0, hi = n - 1, pos = -1;
while (lo <= hi) {
int mid = (lo + hi) / 2;
if (a[mid] == target) { pos = mid; break; }
else if (a[mid] < target) lo = mid + 1;
else hi = mid - 1;
}
cout << "位置:" << pos; // 4
}
一万个数二分最多约 次就够了。切记:二分只对有序数据成立。
小纸条
一万个数二分查找最多几次?
登录 后可看答案