內插搜尋法(Interpolation Search ),又稱插補搜尋法,是二分搜尋法的改良版,二分搜尋法是先找出中間值,而內插搜尋法是透過斜率公式來估出資料可能存在的位置,搜尋前也必須先將資料列排序好。
下面利用10 20 30 40 50 60 70 80 90
搜尋40
為例。
let data = [10,20,30,40,50,60,70,80,90];
let target = 40;
function interpolationSearch(arr, target) {
let start = 0;
let end = arr.length - 1;
let mid;
while (end >= start) {
mid = Math.floor((target - arr[start]) * (end - start) / (arr[end] - arr[start]) + start);
if (arr[mid] === target) {
return "有搜尋結果: 在第" + (mid + 1) + "項";
} else {
if (target > arr[mid]) {
start = mid + 1;
} else {
end = mid - 1;
}
}
}
return "無搜尋結果";
}
console.log(interpolationSearch(data, target)); //"有搜尋結果: 在第4項"
#Interpolation Search
data = [10,20,30,40,50,60,70,80,90]
target = 40
def interpolationSearch(arr, target):
start = 0
end = len(arr)-1
while start <= end:
mid = (target - arr[start]) * (end - start) // (arr[end] - arr[start]) + start
if target == arr[mid]:
return "有搜尋結果: 在第" + str(mid+1) + "項"
else:
if target < arr[mid]:
end = mid - 1
else:
start = mid + 1
return "無搜尋結果"
print(interpolationSearch(data,target))#有搜尋結果: 在第4項