《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找!
作者:野牛程序员:2025-04-25 08:08:50算法阅读 1998
《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找!
今天继续《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找!
🔍 二分查找是啥?
想象一下,一本词典有上千页,现在要找“熊猫”这两个字。
普通查找:
🐢 从第一页一个个翻,翻到眼睛掉出来还没找到……
二分查找:
🦅 直接翻到中间——一看,“老虎”?比“熊猫”早,那就只查前半本;
再翻中间——“猫”?还在前面,再往前翻!
几下就搞定!
👉 这就是二分查找法:每次都把查找范围砍一半!
🧠 二分查找的“数学脑筋”思路:
📚 适用于有序数组
💡 思路如下:
找到中间的元素
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
