当前位置:首页算法 > 正文

《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找!

作者:野牛程序员:2025-04-25 08:08:50算法阅读 1998
《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找!

今天继续《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找


🔍 二分查找是啥?

想象一下,一本词典有上千页,现在要找“熊猫”这两个字。

普通查找:
🐢 从第一页一个个翻,翻到眼睛掉出来还没找到……

二分查找:
🦅 直接翻到中间——一看,“老虎”?比“熊猫”早,那就只查前半本;
再翻中间——“猫”?还在前面,再往前翻!
几下就搞定!

👉 这就是二分查找法:每次都把查找范围砍一半!


🧠 二分查找的“数学脑筋”思路:

📚 适用于有序数组

💡 思路如下:

  • 找到中间的元素 mid

  • 如果目标比它小,就在左边找

  • 如果目标比它大,就在右边找

  • 如果正好相等?恭喜,找到了!


🍬 举个例子:

在数组 [2, 5, 8, 12, 16, 23, 38, 56] 中查找数字 23

  1. 中间是 12(位置3),23 > 12
    👉 往右边找

  2. 右边是 [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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • 《野牛程序员讲少儿编程算法》系列,带娃走进一个聪明得不像话的查找方法——二分查找!
  • 相关推荐

    最新推荐

    热门点击