插值查找法
- 是二分法查找的升级版;
- middle = low+ ((find_data - data[low])*(high-low)) // (data[high]//data[low]);
- high = middle - 1;
- low = middle +1;
- 前提条件:数据必须是排好序的;
- 时间复杂度:O(log2n);
代码
def Interpolation(data, find_data):
low = 0
high = len(data) - 1
while low < high:
middle = low + int((find_data-data[low])*(high-low))//(data[high] - data[low])
if find_data == data[middle]:
return middle
elif find_data < data[middle]:
high = middle - 1
elif find_data > data[middle]:
low = middle + 1
return -1
if __name__ == '__main__':
data_all = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(Interpolation(data_all, 3))