急求大神!要求为二分法查找的非递归算法设计主函数,完善算法并运行验证,代码写了一半不知怎么继续

用C语言写的,我的设想是主函数由用户输入表,然后验证表是否是有序数列,如果有序就让用户输入查找的数据,引用二分法的函数进行查找,如果无序就先按大小顺序排列后再进行查找,然... 用C语言写的,我的设想是主函数由用户输入表,然后验证表是否是有序数列,如果有序就让用户输入查找的数据,引用二分法的函数进行查找,如果无序就先按大小顺序排列后再进行查找,然后根据返回值大小判断查找是否成功。 验证表是否有序我已经写了,无序的排序那块我有点晕,然后根据返回值判断查找是否成功那块也就没写了。我编译了一下没有完成的代码,机器说有一个错误,但是查看组建栏发现有好长一串“error”= =求大神帮忙补充下代码顺带看下那个编译出的错误是怎么回事行么? 下面是我写的代码:#define LIST_SIZE 20#include <stdio.h>
#include "malloc.h"

typedef struct{ KeyType key;
OtherType other_data;
}RecordType;

typedef struct{ RecordType r[LIST_SIZE+1];
int length;
}RecordList;

int BinSrch(RecordList *L,KeyType k){ int low=0;
int i=0;
high=L->length-1;
while(low<=high){
mid=(low+high)/2;
if(k==L->r[mid].key)
{
i=mid;
break;
}
else
if(k<L->r[mid].key)
high=mid-1;
else
low=mid+1;
}
return(i);
}

void main(){
int BinSrch(RecordList *L,KeyType k);
int i;
int a;
int num;
//
//
//
L=malloc(sizeof(RecordList));//申请空间
printf("Please input the list:\n");
for(i=1;i<21;i++)
scanf("%d",&L->r[i]);//输入表

/*验证表是否有序排列,a=1,-1,0时为有序排列,a=2时需要对表进行排序*/
if(L->r[1]<L->r[2]) {
for(i=2;i<21;i++)
{
if(L->r[i]<L->r[i+1])
i++;
}
a=1;
}
else
{
if(L->r[1]>L->r[2])
{
for(i=2;i<21;i++)
{
if(L->r[i]<L->r[i+1])
i++;
}
a=-1;
}
else
{
if(L->r[i]==L->r[i+1])
a=0;
else
a=2;
}
}

/*判断是否是有序,并排序*/ if(a==2)//表无序,先排序
{
}
else//表有序
{
printf("Please input the key-number:");
scanf("%d",k);
num=BinSrch(L,k);
printf("Your key-number is the NO.%d in this list.\n",num);
}
}
展开
 我来答
Lotayou
2013-03-27 · TA获得超过382个赞
知道小有建树答主
回答量:347
采纳率:0%
帮助的人:96.4万
展开全部
排序很简单的……用qsort()好了
void qsort(void* Start, int element, int length, int (*cmp)(const void*,const void*));
使用时,Start为起始位置,element是元素个数,size是元素长度(sizeof()即可),
最关键的是最后一个比较函数,这个需要你自己动手写

返回值int,传参类型 const void*指针
例如,给整数排序:

int cmp (const void* a, const void* b){
return *((int*)a) < *((int*)b); //指针的强制类型转换
}

又如:按Student结构体中的age从大到小排序
int cmp(const void*Stu1,const void*Stu2){
Student * a1 = ( Student* )Stu1;
Student * a2 = ( Student* )Stu2;

return a1->age > a2->age;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
andsom
推荐于2018-04-21 · TA获得超过753个赞
知道小有建树答主
回答量:313
采纳率:0%
帮助的人:122万
展开全部
这代码看起来太累啦,给你一个建议吧。
1、二分查找算法在《数据结构》这本中有完整的描述和算法实现,你可以去看看;
2、建议你的排序和查找这两个功能写成函数,即结构清晰,又便于查找错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式