码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【21天算法学习】折半查找


    作者简介:
    🍀姓姜,字君竹。
    🍁浅薄观点:科以载文,文以载道
    🌱软件技术升计科,计划考研
    🌾要有最朴素的生活和最遥远的梦想,即使明日,天寒地冻,路遥马亡​​​

    1. 概念及介绍
        折半查找(搜索),也称二分查找(搜索)、对数搜索,是一种在有序数组中查找某一特定元素的搜索算法。
        搜索从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索结束。如果要查找的元素大于或者小于之中间元素,则在数组大于或小于中间元素的那一半中查找,且也是从这一半的中间元素开始比较。然后一直重复上述流程,直到找的要找的元素,或者找完不能再折半查找为止。这种搜索算法每一次比较都使得搜索范围缩小了一半。
        折半查找查找速度快、次数少、平均性能好,但查找对象必须是有序的,且很难实现插入删除。所以折半查找使用不常变动且需要频繁查找的有序列表。

    2. 时间空间复杂度
        时间复杂度与寻找次数相关,如果要寻找的值第一次就找到了,则此时的时间复杂度为常数级O(1)。折半查找每查找一次,搜索空间就会折半,所以折半查找正常的时间复杂度是一个以2位底,相对于n的对数O(log2n)。
        折半算法并没有改变原有的元素集合,只需要几个变量记录相关信息,所以空间复杂度为常量级O(1)。

    3. 图解
      在这里插入图片描述

    4. 代码实现

    int main() {
    	int a[] = { 0, 12, 23, 24, 25, 34, 45, 56, 67, 68, 78, 89, 90 };
    	int key = 24;
    	int left = 0;
    	int right = sizeof(a) / sizeof(a[0]) - 1;
    	while (left <= right) {
    		int mid = (left + right) / 2;
    		if (a[mid] == key) {
    			printf("下标是%d", mid);
    			return 0;
    		}
    		else if (a[mid] < key)
    			left = mid + 1;
    		else if (a[mid] > mid)
    			right = mid - 1;
    	}
    	if (left > right) {
    		printf("没找到");
    	}
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。

  • 相关阅读:
    企业微信hook接口协议,ipad协议http,客户群发送任务,获取要发送的客户群列表
    CMS之织梦导航二级下拉菜单
    4.3寸串口屏在智能炒菜机上应用分享
    Isito 入门(四):微服务可观测性
    腾讯云4核8G服务器申请费用多少?性能如何?支持几个人?
    Gartner发布2022年新兴技术成熟度曲线,推动沉浸式、AI自动化发展
    城市排水监测方案(dtu终端配合工业路由器精准监测)
    百度竞价 - 百度单页竞价推广项目实操教程分享
    1Nginx基础及编译安装
    如何理解“构造函数是类公共标识,但原型是唯一的标识“
  • 原文地址:https://blog.csdn.net/qq_47658735/article/details/126252649
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号