C语言程序-顺序查找和折半查找

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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"); }

相关文档
最新文档