1. 线性查找,时间复杂度O(n).
def linear_search(str_num, target):
for i,val in str_num:
if val == target:
return i
else:
return False
2. 二分查找,时间复杂度O(logn).
def Bi_search(str_num, target):
left = 0
right = len(str_num) - 1
while left <= right:
mid = (right + left) // 2
if str_num[mid] == target:
return mid
elif str_num[mid] < target:
left = mid+1
else:
right = mid-1
else:
return False
2.1 搜索旋转数组:搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。
思路:数组无论旋转多少次,都可以等效成旋转一次。因此,我们需要每次比较数组的第一个元素、数组的中间元素、目标值之间的大小关系,从而判断目标值落在中间元素的左边还是右边。