Python3實現(xiàn)折半查找
1. 簡介折半查找,也稱二分罰查找,是一種針對有序數(shù)列進行查找的方法。與順序查找相比,折半查找算法更高效。具體步驟如下:1)對一個無序數(shù)列,首先要排序;2)然后設(shè)定頭尾兩個指針,計算中間位置mid
1. 簡介
折半查找,也稱二分罰查找,是一種針對有序數(shù)列進行查找的方法。與順序查找相比,折半查找算法更高效。具體步驟如下:
1)對一個無序數(shù)列,首先要排序;
2)然后設(shè)定頭尾兩個指針,計算中間位置mid (頭 尾) / 2;
3)用中間位置數(shù)值元素和目標值比較,如果中間元素正好是要查找的元素,則搜索過程結(jié)束;如果目標元素大于或者小于中間元素,則在數(shù)列大于或小于中間元素的那一半中繼續(xù)查找,并且從新計算的中間元素開始比較。如果在計算得到數(shù)據(jù)為空,則代表沒找到。折半查找的范圍不斷縮小一半,所以查找效率較高。
2. 輸入隨機數(shù)列并查找
假設(shè)我們有一個隨機數(shù)列[6, 2, 7, 10, 23, 13, 15],我們要查找其中是否存在數(shù)字13。
首先,我們需要對數(shù)列進行排序,得到[2, 6, 7, 10, 13, 15, 23]。
然后,我們使用折半查找算法進行查找。經(jīng)過三次處理后,我們找到了目標數(shù)據(jù)。
```python
import random
import time
import numpy as np
listNum [6, 2, 7, 10, 23, 13, 15] 示例例子
aimNum (listNum, k1)[0] 隨機挑選一個目標數(shù)字
print(listNum, aimNum)
print("--------隨機數(shù)列-----------")
listNumSort sorted(listNum)
print(listNumSort)
print("-------排序完成------------")
print(BinarySearch(listNumSort, aimNum))
```
3. 查找函數(shù)
下面是我們實現(xiàn)的折半查找函數(shù),為了更清晰地展示每一步的操作,我們添加了注釋。
```python
def BinarySearch(listNum, aimNum):
lowpos 0
highpos len(listNum) - 1
print("當前頭坐標:lowpos {}, 尾坐標 highpos {}".format(lowpos, highpos))
i 0
while(1):
i 1
print("第 {} 趟".format(i))
if(lowpos < highpos):
midpos lowpos (highpos - lowpos) // 2
midNum listNum[midpos]
print(" ", end''')
print(listNum, aimNum)
print("當前頭坐標lowpos {},尾