| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【和我一起学算法】查找篇——二分法查找 -> 正文阅读 |
|
[数据结构与算法]【和我一起学算法】查找篇——二分法查找 |
说到二分查找,相信不少人小时候玩过猜数的游戏,在1~100之间随机挑选一个数,让别人来猜。如果别人猜错了,你要提示他猜的这个数随机数大还是比随机数小,别人继续猜,直到猜到为止。通常这个玩游戏的人都会从50开始猜,因为这样至少排除了一半不可能的数字。如果按照这个方法继续排除,在最大数为100的情况下,最多6次就能猜到这个随机数。这个猜数小游戏和二分查找的思想不谋而合。 目录 二、二分法查找算法原理在一个有序数列里查找一个特定数列,顺序之前讲的顺序查找无疑是最没有效率的方法了。 二分查找的思想就是直接将数列中间的那个数与被查找数key相比较,如果这个数比被查找数key小,毫无疑问的就是被查找数一定在有序数列的后半部分中;否则被查找数一定在数列的前半部分。 举例我们还是以数列iList[0,1,2,3,4,5,6,7,8,9]为例,假设被查找数是9。 第一次查找iLsit的长度为len(iList)=10,最中间的下标元素就是数列首元素的下标0和数列尾元素的下标9的和除以2,(0+9)/2=4。iList[mid]就是iList[4],第一次比较就是和iList[4]比较,如下图所示: ?key比iList[4]大,所以key在iList[4]的后半部分。 第二次查找后半部分的中间元素是iList[7],拿这个数和key值相比,若下图所示: key比iList[7]要大,说明key在iList[7]的后半部分,但是此时后半部分中间元素下标是8,此时只剩下两个元素了,在使用二分查找就得不偿失了 。 第三次查找不再使用二分法查找,直接比较这两个数和key是否相等,如果相等就返回该元素的下标,如果都不想等就返回未找到key的提示信息。如下图所示: ?同样是查找9,顺序查找要查找10次才能找到(这是顺序查找最坏的情况),但是二分查找只需要查找3次(这是二分查找最坏情况),很明显二分查找要比顺序查找效率高。 源码产生随机数列randomLsit.py
快速排序quickSort.py
二分法查找binarySearch.py
往期文章推荐: 排序篇: 查找篇: 如果喜欢这个系列的文章可以订阅我的算法设计与分析专栏,每天更新~ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:48:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |