求教插值查找问题

Samerol_Jomior 2013-08-09 03:44:18
这是我插值查找的代码,但是结果不正确。。找半天没找出来。。求前辈赐教
#include<stdio.h>
int InsertSearch(int *a,int key,int n)
{
int mid,low,high;
low=0;
high=n-1;
while(low<=high)
{
mid=low+(high-low)*(key-a[low])/(a[high]-a[low]);
if(key!=a[mid])
{
if(key>a[mid])
low=mid+1;
else
high=mid-1;
}
else
return mid;
}
return -1;
}

int main()
{
int a[1000];
int i,n,key,x,mid;
printf("请输入个数:");
scanf("%d",&n);
printf("请输入数据:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("请输入查找的数据:");
scanf("%d",&key);
x=InsertSearch(a,key,n);
if(x!=-1)
printf("查找数据的位置是:%d",mid+1);
else
printf("该数据不存在!");
return 0;
}
...全文
148 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
canshui 2013-08-09
  • 打赏
  • 举报
回复

int main()
{
    int a[1000] = {1 ,2, 3, 4, 5};
    int x;
    x = InsertSearch(a, 4, 5);
    // 如果 x 输出 3 则对这组数据程序时正确的,否则有错误
    printf("%d\n\n", x);
    return 0;
}
canshui 2013-08-09
  • 打赏
  • 举报
回复
引用 2 楼 u011144614 的回复:
[quote=引用 1 楼 canshui 的回复:]

    x=InsertSearch(a,key,n);
    
    // 应该输出 x 吧。
    printf("%d\n\n", x);


    if(x!=-1)
        printf("查找数据的位置是:%d",mid+1);
    else
        printf("该数据不存在!");

代码中没有看到使用 mid 来保存查找结果。
啊。。应该是输出x+1.。我太粗心了。。感谢[/quote] 恩,给 lz 个小建议。 其实不必使用 scanf 来构造你的测试数据。 首先,每次的输入会有点浪费时间;其次,先直接写死一组简单的测试数据,并且你可以预测这组数据经过你的程序后会有怎样的输出,会更利于你将焦点专注于编写实际用来解决问题的代码,也更容易发现问题。
Samerol_Jomior 2013-08-09
  • 打赏
  • 举报
回复
引用 1 楼 canshui 的回复:

    x=InsertSearch(a,key,n);
    
    // 应该输出 x 吧。
    printf("%d\n\n", x);


    if(x!=-1)
        printf("查找数据的位置是:%d",mid+1);
    else
        printf("该数据不存在!");

代码中没有看到使用 mid 来保存查找结果。
啊。。应该是输出x+1.。我太粗心了。。感谢
canshui 2013-08-09
  • 打赏
  • 举报
回复

    x=InsertSearch(a,key,n);
    
    // 应该输出 x 吧。
    printf("%d\n\n", x);


    if(x!=-1)
        printf("查找数据的位置是:%d",mid+1);
    else
        printf("该数据不存在!");

代码中没有看到使用 mid 来保存查找结果。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧