Day 8: 二分查找
Posted Gamedge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day 8: 二分查找相关的知识,希望对你有一定的参考价值。
今天的算法是关于排序数列的二分查找,二分查找是一个非常有趣的算法,这是因为这个算法是典型的“披着羊皮的狼”——思想非常好理解,但是同时并不是那么容易完美实现。
二分查找
二分查找又称折半查找,是一种高效且方便的查找方法,但是二分查找要求线性表必须采用顺序存储结构,而且表中元素按关键字与序排列。根据
Rebort Sedgewick说,二分查找最早是在50年代中期被提出的,但是直到60年代中期才有了第一个完美实现的算法实现。而这里的完美仅仅指的是算法不出错。直到2006年Java库中关于二分查找的程序仍然因为bug的出现而不得不被修复。由此可见二分查找虽然简单,但是实现过程中决不可掉以轻心。
程序思路
二分查找的基本思想非常简单,在一个已排序(按照升序排列)的数组A中,使用二分查找x,假如这个数组的范围是[left ... right],则二分查找的实现主要有如下几步:
1、确定middle:middle = (left + right) // 2;
2、将x与A[middle]比较:
1)若相等,则输出middle值;
2)若x < A[middle], 则[middle ... right]中所有值均大于x,故令right = middle - 1 ;
3)若x > A[middle], 则[left ... middle]中所有值均小于x,故令left = middle + 1 。
3、重复以上两步,直至找到x的位置或当前查找区间为空(查找失败)。
上图中我们以寻找“8”为示例,用图示方法简单介绍了二分查找的步骤。二分查找成功的关键点之一在于将其边界left和right置于查找的范围内,另外需要注意的是要确保代码中的判断条件是完整的。
问题
1、二分查找算法的时间复杂度为多少?
以上是关于Day 8: 二分查找的主要内容,如果未能解决你的问题,请参考以下文章