《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找!
作者:野牛程序员:2025-04-25 08:08:50算法阅读 2200
《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找!
今天继续《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找!
? 二分查找是啥?
想象一下,一本词典有上千页,现在要找“熊猫”这两个字。
普通查找:
? 从第一页一个个翻,翻到眼睛掉出来还没找到……
二分查找:
? 直接翻到中间——一看,“老虎”?比“熊猫”早,那就只查前半本;
再翻中间——“猫”?还在前面,再往前翻!
几下就搞定!
? 这就是二分查找法:每次都把查找范围砍一半!
? 二分查找的“数学脑筋”思路:
? 适用于有序数组
? 思路如下:
找到中间的元素
mid如果目标比它小,就在左边找
如果目标比它大,就在右边找
如果正好相等?恭喜,找到了!
? 举个例子:
在数组 [2, 5, 8, 12, 16, 23, 38, 56] 中查找数字 23
中间是 12(位置3),23 > 12
? 往右边找右边是
[16, 23, 38, 56],中间是 23
✅ 找到了!
只查了两次,比一个个查快得多得多得多!
? C++ 代码(让孩子也能看懂的版本):
#include <iostream>
using namespace std;
// 二分查找函数
int binarySearch(int arr[], int size, int target) {
int left = 0;
int right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 防止溢出
if (arr[mid] == target)
return mid; // 找到了
else if (arr[mid] < target)
left = mid + 1; // 去右边找
else
right = mid - 1; // 去左边找
}
return -1; // 没找到
}
int main() {
int arr[] = {2, 5, 8, 12, 16, 23, 38, 56};
int size = sizeof(arr) / sizeof(arr[0]);
int target = 23;
int result = binarySearch(arr, size, target);
if (result != -1)
cout << "找到了,位置是:" << result << endl;
else
cout << "没有找到哦~" << endl;
return 0;
}?♀️ 为什么它很牛?
✅ 查找效率高,时间复杂度是 O(log n),比挨个找快多了
✅ 数越多,优势越明显
✅ 培养孩子的“折半思维”和“区间收缩”逻辑概念
? 小课堂互动:
?:老师老师,数组不是乱的吗?
??:注意⚠️!二分查找只能用在有序数组上哟!
?:那找不到咋办?
??:返回 -1,说明数组里没这个数~
? 小挑战题:
数组 [1, 3, 5, 7, 9, 11] 中查找数字 7,
每一次中间元素是多少?都往哪边找?
? 在纸上画出查找过程!
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

