查找:折半找

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
}

一万个数二分最多约 次就够了。切记:二分只对有序数据成立。

小纸条

一万个数二分查找最多几次?

登录 后可看答案

查找:折半找 · C++ 入门 · op599 课程