前言
最近在刷一些简单的算法,因此写一些文章记录一下,加深一下印象。
为啥要有二分查找或其他一些查找算法呢?
假如说现在有一个数组[1,2,3,4,5]要查找一个5是否在这个数组中,这个时候大部分都会使用顺序查找也就是for循环来进行查找,这个时候只用查询5次就可以查找到我们所需要查找的元素5。
但是如果这个数组中的元素个数有成千上万的话,而且要找的元素5在数组中的最后一个,则需要查找的次数就为n次(n为数组的元素个数),这样的话查找的效率就比较低了,但是用二分查找或者其他一些查找算法的话则能大大提高查找的效率。
二分查找的思路
二分查找的前提是当前的数组是有序的,因此如果是无序的数组要进行二分查找的话则需要先进行排序处理。二分查找的主要思想就是找到当前数组的中间值,再判断你要查找的值是大于小于还是等于这个中间值,然后再根据不同情况进行不同的操作。
假如说现在有一个长度为n的数组,而我们要查找的元素值为x,想查找在数组中是否存在该元素,这个时候的查找过程是这样的:
1.先给数组找一个左右边界,左边界left=0,有边界right=n-1
2.找到数组的中间值的索引,middle = (left + right) / 2。
3.判断x大于小于还是等于中间值
①如果x等于中间值的话,则返回中间值的索引middle
②如果x小于中间值的话,说明middle右边的值(包括middle索引对应的值)都是大于x的,这个时候我们就要重新设置右边界,右边界right&#