#include<iostream>
using namespace std;
#define MAX 100
//普通二分查找
void find(int *num, int n, int left, int right)
{
int flag = 0;
int mid = 0;
while (left < right)
{
mid = left + (right - left) * 0.5;
if (num[mid] == n)
{
cout << "\nfind : " << num[mid] << endl;
flag = 1;
break;
}
else if (num[mid] < n)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
if (!flag)
cout << "\nnot find" << endl;
}
//拉格朗日插值查找
void find1(int *num, int n, int left, int right)
{
int flag = 0;
int mid = 0;
while(left < right)
{
//主要公式 与二分的比列不同: 1.0 * (n - num[left]) / (num[right] - num[left]
mid = left + (right - left) * 1.0 * (n - num[left]) / (num[right] - num[left]);
if (num[mid] == n)
{
cout << "\nfind : " << num[mid] << endl;
flag = 1;
break;
}
else if (num[mid] < n)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
if (!flag)
cout << "\nnot find" << endl;
}
int main()
{
int *num = new int[MAX];
for (int i = 0; i < MAX; ++i)
num[i] = i;
for (int i = 0; i < MAX; ++i)
cout << num[i] << " ";
find1(num, 7, 0, MAX - 1);
delete num;
system("pause");
return 0;
}
代码如上