二分查找和插值查找,(二分查找是插值查找的特例)
int search2(double *p,int n,int key)
{
int tou, wei, zhong;
tou = 0;
wei = n - 1;
int ci = 0;
while (tou<=wei)
{
printf("查找第%d次\n", ++ci);
//二分查找只是插值查找的特例
zhong = (wei + tou) * 1 / 2 = tou + (wei - tou) * 1 / 2; //二分查找只是插值查找的特例
zhong = tou + (wei - tou)*(key - p[tou]) / (p[wei] - p[tou]); //差值,求比例
//(key - p[tou]) / (p[wei] - p[tou])//确定比例
//wei - tou多少个元素
if (p[zhong]== key)
{
return zhong;
}
else if (key> p[zhong])
{
tou = zhong + 1;
}
else
{
wei = zhong - 1;
}
}
return -1;
}