还是c语言的问题 麻烦高手帮我看看这个程序哪里出错了

来源:百度知道 编辑:UC知道 时间:2024/06/30 13:11:13
题目要求是将无序的元素排列好,这一步是对的;然后用折半查找(binsearch),发现找结构体里有的数据输出还是-1(查找失败),问题出在哪里?
#include<stdio.h>
#define N 100
struct record
{
int key;
int otheritem;
};
typedef struct record RECORD;
RECORD file[N+1];
void insertsort(RECORD R[],int n)
{
int i,j;
for(i=2;i<=n;i++)
{
R[0]=R[i];
j=i-1;
while(R[0].key<R[j].key)
{
R[j+1]=R[j];
j--;
}
R[j+1]=R[0];
}
}
int binsearch(RECORD R[],int k)
{
int low,mid,high;
low=0;
high=N-1;
while(low<=high)
{
mid=(low+high)/2;
if(k==R[mid].key)
return mid;
else if(k>R[mid].key)
low=mid+1;
else
high=mid-1;
}
return -1;
}

main()
{
int a,j;
int i=1;
int n=0;
RECORD R[N];
printf("Please input the number:\n");

那就将输入记录的个数传入函数binsearch
int binsearch(RECORD R[],int k, int n);
不过这样好像最后一个记录的位置不对,其他的应该都对了,请高手改改吧。

#include<stdio.h>
#define N 100

struct record
{
int key;
int otheritem;
};
typedef struct record RECORD;

RECORD file[N+1];

void insertsort(RECORD R[],int n)
{
int i,j;
for(i=2;i<=n;i++)
{
R[0]=R[i];
j=i-1;
while(R[0].key<R[j].key)
{
R[j+1]=R[j];
j--;
}
R[j+1]=R[0];
}
}

int binsearch(RECORD R[],int k, int n)
{
int low,mid,high;
low=0;
high=n - 1;
while(low<=high)
{
mid=(low+high)/2;
if(k==R[mid].key)
return mid;
if(k>R[mid].key)
low=mid+1;
else
high=mid-1;
}
return -1;
}

main()
{
int a,j;
int i=1;
int n=0;
RECORD R[N];
printf("Ple