python二分查找算法找出數(shù)字位置
一、原理二分查找算法是一種分治思想的典型應(yīng)用,它的核心思想是將查找范圍不斷縮小,直到找到目標(biāo)或者確定不存在。具體步驟如下:1. 將有序數(shù)組按照中間元素進(jìn)行劃分,得到左右兩個(gè)子數(shù)組。2. 如果中間元素與
一、原理
二分查找算法是一種分治思想的典型應(yīng)用,它的核心思想是將查找范圍不斷縮小,直到找到目標(biāo)或者確定不存在。具體步驟如下:
1. 將有序數(shù)組按照中間元素進(jìn)行劃分,得到左右兩個(gè)子數(shù)組。
2. 如果中間元素與目標(biāo)相等,則查找成功,返回下標(biāo)。
3. 如果中間元素大于目標(biāo),則在左子數(shù)組中繼續(xù)查找。
4. 如果中間元素小于目標(biāo),則在右子數(shù)組中繼續(xù)查找。
5. 重復(fù)以上步驟,直到查找范圍為空,表示目標(biāo)不存在。
二、實(shí)現(xiàn)步驟
下面是Python中二分查找算法的實(shí)現(xiàn)步驟:
1. 定義一個(gè)函數(shù)binary_search,接收三個(gè)參數(shù):有序數(shù)組arr、目標(biāo)數(shù)字target和搜索范圍的起始位置start。
2. 判斷搜索范圍是否為空,如果為空則返回-1,表示目標(biāo)不存在。
3. 計(jì)算搜索范圍的中間索引mid。
4. 如果中間元素等于目標(biāo)數(shù)字,返回mid。
5. 如果中間元素大于目標(biāo)數(shù)字,遞歸調(diào)用binary_search,在左子數(shù)組中繼續(xù)查找,搜索范圍為start到mid-1。
6. 如果中間元素小于目標(biāo)數(shù)字,遞歸調(diào)用binary_search,在右子數(shù)組中繼續(xù)查找,搜索范圍為mid 1到end。
7. 重復(fù)以上步驟,直到找到目標(biāo)或者確定不存在。
三、代碼實(shí)例
下面是一個(gè)示例代碼,演示了如何使用Python實(shí)現(xiàn)二分查找算法:
```python
def binary_search(arr, target, start0):
end len(arr) - 1
if start > end:
return -1
mid (start end) // 2
if arr[mid] target:
return mid
elif arr[mid] > target:
return binary_search(arr, target, start, mid-1)
else:
return binary_search(arr, target, mid 1, end)
arr [1, 3, 5, 7, 9, 11]
target 7
result binary_search(arr, target)
if result ! -1:
print("目標(biāo)數(shù)字在數(shù)組中的位置為", result)
else:
print("目標(biāo)數(shù)字不存在于數(shù)組中")
```
以上代碼會輸出"目標(biāo)數(shù)字在數(shù)組中的位置為 3",表示目標(biāo)數(shù)字7在數(shù)組arr中的索引位置為3。
結(jié)論:
Python中的二分查找算法是一種高效的搜索方法,適用于有序數(shù)組。通過將查找范圍不斷縮小,可以快速定位目標(biāo)數(shù)字在數(shù)組中的位置。在實(shí)際應(yīng)用中,可以根據(jù)自己的需要進(jìn)行相應(yīng)的調(diào)整和擴(kuò)展,以滿足不同的場景需求。