前言
二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法。其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功;若给定的值小于中间记录的关键字,则在中间记录的左半区间继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区间继续查找;不断重复这个过程,直到查找成功。否则查找失败。这个思想与孔子中的中庸思想和相似。
二分查找算法的实现
基于上述的思想,可以很快写出如下代码:
public int binarySearch(int[] a,int key) { int low = 0; int high = a.length - 1; int mid = 0; while(low <= high){ mid = (low + high) / 2; if(a[mid] == key) return mid; if(a[mid] > key) high = mid - 1; if(a[mid] < key) low = mid + 1; } return -1; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
实际上,二分查找的过程可以绘制成一棵二叉树,每次二分查找的过程就相当于把原来的树划分为两棵子树,所以每次二分之后下次就只需要查找其中一半的数据就可以了。那么二分查找算法的时间复杂度是多少呢?在最好的情况下,只需要查找一次就可以了,因为这时候中间记录的关键字与要查找的key是相等,自然一次就够了。在最坏的情况下是从根节点查找到最下面的叶子结点,这个过程需要的时间复杂度是O(logn) O(logn),但是从性能看,仍然是优于二分查找算法的。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow