1.折半查找
2.插叙查找
就是把1中的mid = (low+high)/2改为mid = low + (key - a[low])*(high - low)/(a[high] - a[low]);
具体代码如下:
#include<stdio.h>
int Bisearch(int *a,int n, int key);
int main()
{
int a[100];
int i = 0;
int key = 0;
int n = 0;
int return_number;
printf("Please Enter how many you want to input numbers!\n");
scanf("%d", &n);
printf("Please Enter %d numbers!\n", n);
for(; i <= n - 1; i++)
{
scanf("%d", &a[i]);
}
printf("Please Input the search number!\n");
scanf("%d", &key);
return_number = Bisearch(a, n, key);
if(return_number != 0)
{
printf("查找成功!\n");
printf("查找到%d的位序是%d\n", a[return_number], return_number);
}
else
{
printf("查找失败,未找到该数!\n");
}
}
int Bisearch(int *a,int n, int key)
{
int low, high, mid;
high = n-1;
low = 0;
while(low <= high)
{
//mid = (low + high)/2;//折半查找
mid = low + (key - a[low])*(high - low)/(a[high] - a[low]);//插值查找
if(a[mid] < key)
{
low = mid + 1;
}
else if(a[mid] > key)
{
high = mid - 1;
}
else
{
return mid;
}
}
return 0;
}