查找算法全解析:从顺序查找、折半查找到哈希查找

《算法江湖三大神探:顺序、折半与哈希的破案日常》

一、引子:办公室里的"找东西"战争

"小王,你的年终奖方案呢?"

"啊!我刚才放在电脑包里的文档找不到了!"

"别慌,我教你三招武林秘技------顺序查找、折半查找和哈希查找,从此告别'找东西困难症'!"

二、第一任侦探:顺序查找(线性查找)

调查手段:地毯式搜索

原理 :从头到尾挨个翻,像扫雷游戏一样不放过任何角落。
适用场景:无序的抽屉、乱糟糟的书包、刚搬家的衣柜。

python 复制代码
def 顺序查找(物品列表, 目标物品):
    for i in range(len(物品列表)):
        if 物品列表[i] == 目标物品:
            return f"找到啦!在第{i+1}个位置!"
    return "没找到,可能被猫吃掉了!"
    
# 使用示例:
电脑包 = ["充电器", "口红", "年终奖方案.docx", "咖啡渣"]
print(顺序查找(电脑包, "年终奖方案.docx"))
# 输出:找到啦!在第3个位置!

笑点

"这方法就像找男朋友,从微信好友第一页开始翻,翻到第100页还没找到,就哭着说'怎么又单身了'!"

性能:最坏情况要翻完所有物品,时间复杂度O(n),适合小范围搜索。


三、第二任侦探:折半查找(二分查找)

调查手段:缩小包围圈

原理

  1. 数据必须有序(比如按日期排序的文件)
  2. 每次猜中间值,根据大小缩小搜索范围
  3. 重复直到找到目标或确认不存在

适用场景:图书馆书架、按日期排列的邮件、Excel表格排序后的列。

python 复制代码
def 折半查找(有序列表, 目标值):
    左边界 = 0
    右边界 = len(有序列表) - 1
    while 左边界 <= 右边界:
        中间 = (左边界 + 右边界) // 2
        if 有序列表[中间] == 目标值:
            return f"找到啦!在第{中间+1}个位置!"
        elif 有序列表[中间] < 目标值:
            左边界 = 中间 + 1  # 目标在右半区
        else:
            右边界 = 中间 - 1  # 目标在左半区
    return "没找到,可能被老板锁进保险箱了!"

# 使用示例:
文件夹 = [1,3,5,7,9,11,13]
print(折半查找(文件夹, 7))
# 输出:找到啦!在第4个位置!

笑点

"这方法就像和女友猜价格:'三千块?''多了!''一千?''少了!''一千五?'------最后发现她根本没打算买!"

性能:时间复杂度O(logn),适合大规模有序数据。


四、第三任侦探:哈希查找(散列查找)

调查手段:魔法定位器

原理

  1. 用哈希函数把目标转换成"地址"(比如姓名→抽屉编号)
  2. 直接去对应地址找
  3. 冲突处理:如果地址重复,就加个"小仓库"(链地址法)

适用场景:身份证查档案、数据库查询、手机通讯录。

python 复制代码
# 简易哈希表实现(用字典模拟)
哈希表 = {}
def 存入文件(文件名, 内容):
    # 哈希函数:取文件名长度作为键
    哈希地址 = len(文件名)
    if 哈希地址 in 哈希表:
        哈希表[哈希地址].append( (文件名, 内容) )
    else:
        哈希表[哈希地址] = [ (文件名, 内容) ]

def 查找文件(目标文件名):
    哈希地址 = len(目标文件名)
    if 哈希地址 in 哈希表:
        for 文件 in 哈希表[哈希地址]:
            if 文件[0] == 目标文件名:
                return 文件[1]
    return "404 Not Found!"

# 使用示例:
存入文件("年终奖方案.docx", "涨薪50%")
存入文件("辞职信.txt", "我要去创业")
print(查找文件("年终奖方案.docx"))
# 输出:涨薪50%

笑点

"这方法像快递分拣员:'王健林的包裹去A区,马云的快递去B区'------直到某天发现王健林和马云用了同一个地址..."

性能:理想情况下O(1),但要注意哈希冲突问题。


五、三大神探对比表

算法 有序性要求 时间复杂度 适用场景
顺序查找 O(n) 小范围、无序数据
折半查找 必须有序 O(logn) 大规模有序数据
哈希查找 O(1)/O(n) 高频查询、键值对存储

六、结语:选择你的破案神器

  • 找散落的钥匙:顺序查找(虽然慢,但总能找到)
  • 查百万条销售数据:折半查找(效率高到老板夸你)
  • 实时查询用户信息:哈希查找(快到怀疑人生)

下次再遇到"文件失踪案",记得用这三大神探帮你破案!毕竟,好的算法就像好用的抽屉------让生活少点混乱,多点惊喜!

相关推荐
林鹿6 分钟前
Dart: 串联多个数据流
后端·架构·dart
Java水解27 分钟前
MySQL 分页查询优化
后端·mysql
想用offer打牌44 分钟前
面试官拷打我线程池,我这样回答😗
java·后端·面试
用户6945295521701 小时前
国内开源版“Manus”——AiPy实测:让你的工作生活走上“智动”化
前端·后端
重庆小透明1 小时前
【从零学习JVM|第三篇】类的生命周期(高频面试题)
java·jvm·后端·学习
寻月隐君1 小时前
Rust + Protobuf:从零打造高效键值存储项目
后端·rust·github
radient1 小时前
Java/Go双修 - Go哈希表map原理
后端
陈随易2 小时前
Gitea v1.24.0发布,自建github神器
前端·后端·程序员
前端付豪2 小时前
汇丰银行技术架构揭秘:全球交易稳定背后的“微服务+容灾+零信任安全体系”
前端·后端·架构
于顾而言2 小时前
【Map Or Rewrite】Nginx基于会话转发的一些实践
后端