从一个列表中找到目标元素的下标
1.线性查找
顾名思义,也就是顺序查找,遍历每一个元素,所以比较慢
num_list=list(range(1,201))
def linear(num_list,num):
for index in range(len(num_list)):
if num_list[index]==num:
return index
return -1
2.二分法查找
列表长度每次减半,所以比较快,但二分法排序列表必须是一个从小到大排列的有序列表。
a.思路
-
首先,从列表的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
-
如果目标元素小于中间元素,则更改候选区,在列表小于中间元素的那一半区域查找;如果目标元素大于中间元素,则更改候选区,在列表大于中间元素的那一半区域查找,重复上面步骤
-
如果遍历完整个列表也找不到,返回-1。
b.非递归代码
num_list=list(range(1,201))
def binarySearch(num_list,num):
low=0
high=len(num_list)-1
while low<=high:
mid=(low+high)//2
if num_list[mid]==num:
return mid
elif num_list[mid]>num:
high=mid-1
else:
low=mid+1
return -1
c.递归代码
num_list=list(range(1,201))
low=0
high=len(num_list)-1
def binarySearch(num_list,num,low,high):
while low<=high:
mid=(low+high)//2
if num_list[mid]==num:
return mid
elif num_list[mid]>num:
high=mid-1
return my_search(num_list,num,low,high)
else:
low=mid+1
return my_search(num_list, num, low, high)
return -1