【演算】內插搜尋法 - Interpolation Search
#include <stdio.h>
#include <stdlib.h>
int interpolationSearch(int[], int, int);
int main(void)
{
int search, ans;
int data[] = {5, 12, 19, 26, 37, 44, 60, 65, 73, 85};
printf("請輸入欲搜尋的資料: ");
scanf("%d", &search);
// 呼叫函式進行搜尋
ans = interpolationSearch(data, search, sizeof(data) / sizeof(int));
if (ans < 0)
{
printf("找不到 %d\n", search);
}
else
{
printf("在第 %d 筆資料找到 %d\n", ans + 1, search);
}
system("pause");
}
int interpolationSearch(int data[], int search, int n)
{
int low = 0, upper = n - 1;
while (low <= upper)
{
int mid = low + (upper - low)
* (search - data[low])
/ (data[upper] - data[low]);
if (data[mid] == search)
{
return mid;
}
else if (data[mid] > search)
{
upper = mid - 1;
}
else if (data[mid] < search)
{
low = mid + 1;
}
}
return -1;
}