二分查找
使用二分法对数组进行元素的搜索,返回查找的元素索引,当然使用二分搜索的前提是数组已经完成排序。原始数组有10个元素,要搜索的元素是11。
整个排序过程如下:
首先原始数组如下:
第一次两个指针位置如下:
低指针和高指针分别指向数组元素的最低处和最高处,也就是指向索引0位置和索引 length-1处,中点指向(low + high)/ 2位置(此时mid指向的值为4.5,向下取整得到4)。此时mid处指向的元素大小为9,小于11,所以将low指针指向此时的mid + 1位置,mid指向(low + high)/ 2位置。如下图:
第二次两个指针位置:
此时mid指向的元素为13,大于11,所以high指向mid-1处,mid指向(low + high)/ 2处。如下图:
此时mid和low重合了,不过没关系,仍然重复上面的步骤,mid指向的元素为10.小于11.所以low指向mid + 1位置,此时low、mid、high三者都重合了,比较mid与11,此时相等了,返回此时的索引也就是mid,完成搜索。
这个过程的python代码如下(部分来自算法图解):
# -*- coding: utf-8 -*- """ Created on Sun Nov 29 16:05:51 2020 @author: cyhu """ def binarySearch(list, item): """ Parameters ---------- list: 以list的形式输入数据. item: 要搜索的元素. Returns ------- return : 搜索结果,返回搜索到的索引或者返回None. """ low = 0 high = len(list) - 1 while(low <= high): mid = (low + high) // 2 guess = list[mid] if guess == item: return mid elif guess > item: high = mid - 1 elif guess < item: low = mid + 1 return None if __name__ == "__main__": list = [2,5,7,8,9,10,11,13,15,20] result = binarySearch(list, 11) print(result)