二分查找PPT
二分查找(Binary Search)是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束...
二分查找(Binary Search)是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且同样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。基本思想二分查找只适用于有序数组。其基本思想是,通过每次与数组中间的元素比较,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。算法步骤首先从数组的中间元素开始搜索,如果该元素正好是目标值,则搜索过程结束如果目标值大于或小于中间元素则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较如果在某一步骤数组为空则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半实现方式以下是使用Python实现二分查找的示例代码:在上面的代码中,我们定义了一个名为binary_search的函数,该函数接受一个有序数组arr和一个目标值target作为参数。函数首先初始化两个指针low和high,分别指向数组的第一个元素和最后一个元素。然后,进入一个while循环,在循环中,计算中间元素的索引mid,并将其与目标值进行比较。如果中间元素等于目标值,则返回其索引。如果中间元素小于目标值,则说明目标值可能在中间元素的右侧,因此将low指针移动到mid+1。如果中间元素大于目标值,则说明目标值可能在中间元素的左侧,因此将high指针移动到mid-1。如果循环结束后仍未找到目标值,则返回-1,表示目标值不在数组中。性能分析二分查找的时间复杂度为O(log n),其中n为数组的长度。这是因为在每次迭代中,搜索范围都会减半。二分查找是一种非常高效的搜索算法,但前提条件是数组必须是有序的。如果数组无序,则需要先对数组进行排序,排序的时间复杂度通常为O(n log n)或O(n^2),这会使得二分查找的整体效率降低。应用场景二分查找在实际应用中有很多场景,例如:数据库中的索引查询数据库中的索引通常使用二分查找来快速定位到数据的位置有序数组的快速查询对于已经排序好的数组,可以使用二分查找来快速查找某个元素缓存替换策略在某些缓存替换策略中,如LRU(Least Recently Used)缓存,可以使用二分查找来快速找到最近最少使用的元素优缺点二分查找的优点是时间复杂度低,能在对数时间内完成搜索。缺点是要求数组必须有序,如果数组无序,则需要先排序,这会增加额外的时间复杂度。此外,二分查找只能用于查找元素是否存在,不能用于查找元素的所有出现位置(如果需要查找所有出现位置,可以使用其他算法,如KMP算法等)。变种算法二分查找有很多变种算法,例如二分查找的旋转数组、二分查找的搜索插入位置等。这些变种算法针对特定的问题场景进行优化,可以在不同的条件下提高搜索效率。二分查找的旋转数组在旋转数组中,原始的有序数组被旋转了k次(k为非负整数)。例如,原始数组为[0,1,2,4,5,6,7],旋转一次后变为[4,5,6,7,0,1,2]。针对这种情况,可以使用变种的二分查找算法。算法步骤如下:首先判断中间元素是否等于目标值,如果是,则直接返回中间元素的索引