dasusu
2015-06-19 13:55
采纳率: 66.7%
浏览 1.8k
已采纳

我是初学,一个关于顺序查找和折半查找的算法有错,求解答

```#include
#define Max 256

typedef struct Keylist
{
int key[Max];
int len;
}Keylist;

void creatKlist(Keylist L)
{
int i=0;
printf("**建立静态表**\n");
printf("你需要构建多少个数据,请输入:");
scanf("%d",&L.len);
printf("\n");
for(i=0;i<L.len;i++)
{
printf("请输入100以内的数据\n");
scanf("%d",&L.key[i]);
}
}

Keylist sort(Keylist L)
{
int i,t;
for(i=0;i {
if(L.key[i]>L.key[i+1])
{
t=L.key[i];
L.key[i+1]=L.key[i];
L.key[i]=t;
}
}
return L;
}

int Seqsearch(Keylist L,int k)
{
int i;
for(i=L.len;L.key[i]!=k;i--)
return i;
}

int *Binsearch(Keylist L,int k)
{
int high=L.len,low=1,mid;
int a[1];
while(low<=high)
{
mid=(low+high)/2;
if(L.key[mid]==k)
{
a[0]=mid;
return a;
}
else if(L.key[mid]<k)
{
low=mid+1;
a[1]++;
}
else
{
high=mid-1;
a[1]++;
}
}
return a;
}

void main()
{
Keylist L;
int a[1];
creatKlist(L);
int k,i,choice;
printf("请输入你想要执行的操作序号:\n");
printf("1.顺序查找\n2.折半查找\n");
scanf("%d",&choice);
switch(choice)
{
printf("请输入关键码:\n");
scanf("%d,&k");
case'1':
i=Seqsearch(L,k);
printf("顺序查找只有一次\n");
if(i!=0)
printf("关键码的位置是第%d个",i);
if("i=0")
printf("关键码不存在!");
break;
case'2':
a=Binsearch(L,k);
printf("折半查找位置在%d\n",a[0]);
printf("总共找了%d次\n",a[1]);
break;
default:
printf("输入错误!结束进程!");
break;
}
return ;
}


  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

4条回答 默认 最新

相关推荐 更多相似问题