查找复习
约 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 要不要加一减一,写错就会漏掉答案或者陷入死循环。
小纸条
无序数据能直接二分吗?
登录 后可看答案