数据结构: 折半查找和插值查找

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;

}



猜你喜欢

转载自blog.csdn.net/weixin_41588502/article/details/80503667