查找复习

8 分钟

查找就是在一堆数据里找某个东西。顺序查找像从头一本本翻书,简单但慢;二分查找像查字典,每次翻到中间对半砍,快得多——但前提是数据必须已经排好序。

#include <iostream>
using namespace std;

int main() {
    int a[6] = {1, 3, 5, 7, 9, 11}; // 必须有序
    int target = 7, lo = 0, hi = 5;
    while (lo <= hi) {
        int mid = (lo + hi) / 2;
        if (a[mid] == target) { cout << "在下标 " << mid << endl; break; }
        else if (a[mid] < target) lo = mid + 1;
        else hi = mid - 1;
    }
    return 0;
}

无序的数据不能直接二分,得先排序。二分最容易写错的是边界:到底用 <= 还是 <、mid 要不要加一减一,写错就会漏掉答案或者陷入死循环。

小纸条

无序数据能直接二分吗?

登录 后可看答案

查找复习 · C++ 入门 · op599 课程