C语言程序-顺序查找和折半查找
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#define MAXLEN 50
typedef struct {
int key;
char data;
}datatype;
int getsort(datatype x[] );
int seqsearch(datatype x[],int key,int n);
int binsearch(datatype x[],int key,int n );
void insertsort(datatype x[],int n);
void print(datatype x[],int n);
void main()
{ int sel,n,s,key,i; /*sel 输入选择,n 记录长度,s 查找方法的选择,key 查找关键字给定值,i 目标记录的下标*/
datatype x[MAXLEN];
printf("请输入你的选择:1---开始其他选择为退出\nyour choice =");
scanf("%d",&sel);
while(sel==1)
{ printf("\n输入关键字序列,以-1结束输入:");
n=getsort(x );
printf("请输入选择的查找方法:1---顺序查找2---折半查找3-退出查找\nyour choice =");
scanf("%d",&s);
while(s!=3)
{ printf("请输入查找关键字给定值key=");
scanf("%d",&key);
if(s==1)
{ printf("\n原关键字序列为:");
print(x,n);
i=seqsearch(x,key,n);
if(i==-1)
printf("\n没有给定值记录!\n");
else
printf("\n查找的结果为表中的第%d 条记录!\n",i+1); }
else if(s==2)
{ i= binsearch(x,key,n );
if(i==-1)
printf("\n没有给定值记录!\n");
else
printf("\n查找的结果为表中的第%d 条记录!\n",i+1); }
else
printf("选择错误!\n");
printf("请输入选择的查找方法:1---顺序查找2---折半查找3-退
出查找\nyour choice =");
scanf("%d",&s); }
printf("请输入你的选择:1---开始其他选择为退出\nyour choice =");
scanf("%d",&sel); } }
/*输入记录的关键字*/
int getsort(datatype x[] )
{ int i=0;
scanf("%d",&x[i].key);
while(x[i].key!=-1)
{ i++;
scanf("%d",&x[i].key); }
return i; }
/*顺序查找*/
int seqsearch(datatype x[],int key,int n)
{ int i;
for(i=0;i { if(key==x[i].key) return i; } return -1; } /*折半查找*/ int binsearch(datatype x[],int key, int n) { int low,mid,hig; /*定义位置指示器*/ datatype y[MAXLEN]; low=0; hig=n-1; for(int i=0;i y[i]=x[i]; insertsort(y,n); /*排序*/ printf("\n排序后关键字序列为:"); print(y,n); while(low<=hig) /*查找*/ { mid=(low+hig)/2; if(key ==y[mid].key) return mid; else if(key >y[mid].key) low=mid+1; else hig=mid-1; } return -1; } /*直接插入排序*/ void insertsort(datatype x[],int n) { int i,j; datatype temp; /*中间变量*/ for(i=1;i { temp=x[i]; j=i-1; while(j>-1 && temp.key { x[j+1]=x[j]; j--; } x[j+1]=temp; } } /*显示输出*/ void print(datatype x[],int n) { int i; for(i=0;i printf("%d\t",x[i]); printf("\n"); }