查找算法经常出现在笔试中,掌握基础的查找算法非常重要。
1. 折半查找(非常重要)
概念
折半查找要求线性表是有序的。
折半查找的基本思路:设R[low,…,high]是当前查找区间,首先确定该区间的中间位置,mid=(low+high)/2;然后将待查的k值与R[mid]比较,若相等,则查找成功,并返回该位置,否则需确定新的查找区间。若R[mid]>k,则又表有序性,确认该记录必定是在mid左边的子表R[low,…,mid-1],类似的,若R[mid]<k,则记录在mid右边的子表R[mid+1,…,high]中。递归处理新区间,直到子区间长度小于1是时查找结束。
实现
def bsearch(R, k):
"""
折半查找的实现
:param R: 有序数组
:param k: 关键字
:return: 如果找到返回下标,否则返回-1
"""
low = 0
high = len(R) - 1
while low <= high:
mid = (low + high) // 2
if R[mid] == k:
return mid
elif R[mid] > k:
high = mid - 1
else:
low = mid + 1
return -1
if __name__ == '__main__':
user_input1 = input('请输入数组","隔开:\n').strip()
sorted = [int(item) for item in user_input1.split(',')]
user_input2 = input('请输入要查询的数字:\n').strip()
k = int(user_input2)