📄 查找.c
字号:
return(i);
}
QUISORT5(b5,s1,t1)
person b5[];
int s1,t1;
{ int i,j;
if(s1<t1)
{ i=PARTION5(b5,s1,t1);
QUISORT5(b5,s1,i-1);
QUISORT5(b5,i+1,t1);
}
printf("对外语进行快速排序的结果为:\n");
fun2(b5);
}
selsort5(b5) /*对外语进行直接选择排序*/
person b5[];
{ int i,j,k;
person temp;
for(i=1;i<Q-1;i++)
{ k=i;
for(j=i+1;j<Q;j++)
if(b5[j].cour[2]<b5[k].cour[2])
k=j;
if(k!=i)
{ temp=b5[i];
b5[i]=b5[k];
b5[k]=temp;
}
}
printf("对外语进行直接选择排序的结果为:\n");
fun2(b5);
}
SIFT5(b5,i,m) /*对外语进行堆排序*/
person b5[];
int i,m;
{ int j;
person temp;
temp=b5[i];
j=2*i;
while(j<=m)
{ if((j<m) && (b5[j].cour[2]<b5[j+1].cour[2]))
j++;
if(temp.cour[2]<b5[j].cour[2])
{ b5[i].cour[2]=b5[j].cour[2];
i=j; j=2*i;
}
else
break;
}
b5[i]=temp;
}
HEASORT5(b5)
person b5[];
{ int i,j;
person temp;
for(i=Q/2;i>=1;i--)
SIFT5(b5,i,Q);
for(i=Q;i>=1;i--)
{ temp=b5[1];
b5[1]=b5[i];
b5[i]=temp;
SIFT5(b5,1,i-1);
}
printf("对外语进行堆排序的结果为:\n");
fun2(b5);
}
MERGE5(b5,a5,low,mid,high) /*对外语进行归并排序*/
person b5[];
person a5[];
int low,mid,high;
{ int i,j,k;
low=1; mid=Q/2+1; high=Q;
i=low; j=mid; k=low;
while((i<=Q/2) && (j<=high))
if(b5[i].cour[2]<=b5[j].cour[2])
a5[k++]=b5[i++];
else
a5[k++]=b5[j++];
while(i<=Q)
a5[k++]=b5[i++];
while(j<=Q)
a5[k++]=b5[j++];
}
MERGEP5(b5,a5,length)
person b5[];
person a5[];
int length;
{ int i,j;
i=0;
while(i+2*length-1<Q+1)
{ MERGE5(b5,a5,i,i+length-1,i+2*length-1);
i=i+2*length;
}
if(i+length-1<Q)
MERGE5(b5,a5,i,i+length-1,Q);
else
for(j=i;j<Q+1;j++)
a5[j]=b5[j];
}
MERGES5(b5)
person b5[];
{ int length;
length=1;
while(length<Q+1)
{ MERGEP5(b5,a5,length);
length=2*length;
MERGEP5(a5,b5,length);
length=2*length;
}
printf("对外语进行归并排序的结果为:\n");
fun2(a5);
}
SEQSEAR1(b1,temp) /*对学生学号进行顺序查找*/
person b1[];
person temp;
{ int i,j;
char ch;
do
{ printf("请输入要查找的学生学号:\n");
scanf("%d",&temp.num);
i=1;
while(temp.num!=b1[i].num)
{ i++;
if(i==Q+1)
{ printf("查找失败!\n");
break;
}
}
if(temp.num==b1[i].num)
{ printf("该学生的信息为:\n");
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
printf("%d\t%s\t%d\t%s\t%s\t",b1[i].num,b1[i].name,b1[i].age,b1[i].sex,b1[i].dep);
for(j=0;j<K;j++)
printf("%d\t",b1[i].cour[j]);
}
printf("\n是否继续查找?\n");
getchar(); ch=getchar();
} while(ch=='y');
printf("按4键返回上一级菜单!\n");
ch=getchar();
}
INNAME1(b1) /*对学生学号进行二分查找*/
person b1[];
{ int i,j;
for(i=2;i<Q+1;i++)
{ b1[0]=b1[i];
j=i-1;
while(b1[0].num<b1[j].num)
b1[j+1]=b1[j--];
b1[j+1]=b1[0];
}
}
BINSEAR1(b1,temp)
person b1[];
person temp;
{ char ch;
int j,low,mid,high;
INNAME1(b1);
do
{ low=1; high=Q;
printf("请输入要查找的学生学号:\n");
scanf("%d",&temp.num);
while(low<=high)
{ mid=(low+high)/2;
if(temp.num==b1[mid].num)
{ printf("该学生的信息为:\n");
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
printf("%d\t%s\t%d\t%s\t%s\t",b1[mid].num,b1[mid].name,b1[mid].age,b1[mid].sex,b1[mid].dep);
for(j=0;j<K;j++)
printf("%d\t",b1[mid].cour[j]);
break;
}
if(temp.num<b1[mid].num)
high=mid-1;
else
low=mid+1;
}
if(low>high)
{ printf("查找失败!\n");
printf("是否继续查找?\n");
getchar(); ch=getchar();
}
else
{ printf("\n是否继续查找?\n");
getchar(); ch=getchar();
}
} while(ch=='y');
printf("按4键返回上一级菜单!\n");
ch=getchar();
}
person *INSEAR1(t,s) /*对学生学号进行二叉排序树查找*/
person *t;
person *s;
{ person *f;
person *p;
p->num=t->num;
while(p->num!=NULL)
{ f->num=p->num;
if(s->num==p->num)
printf("无须插入!\n");
return(t);
if(s->num<p->num)
p=p->lchild;
else
p=p->rchild;
}
if(t->num==NULL)
return(s);
if(s->num<f->num)
f->lchild=s;
else
f->rchild=s;
return(t);
}
CREAT1(t)
person *t;
{ int i;
person b1[100];
person s[100];
t=NULL;
for(i=1;i<Q+1;i++)
{ s[i].num=b1[i].num;
t=INSEAR1(t,s[i]);
}
}
BSTSEAR1(b1)
person b1[];
{ int i=1,j=0;
char ch;
person *temp;
CREAT1(T);
do
{ printf("请输入要查找的学生学号:\n");
scanf("%d",&temp->num);
while(T!=NULL)
{ if(T->num==temp->num)
{ printf("该学生的信息为:\n");
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
printf("%d\t%s\t%d\t%s\t%s\t",b1[i].num,b1[i].name,b1[i].age,b1[i].sex,b1[i].dep);
for(j=0;j<K;j++)
printf("%d\t",b1[i].cour[j]);
break;
}
if(T->num>temp->num)
T=T->lchild;
else
T=T->rchild;
}
printf("查找失败!\n");
printf("是否继续查找?\n");
getchar(); ch=getchar();
} while(ch=='y');
printf("按4键返回上一级菜单!\n");
ch=getchar();
}
SEQSEAR2(b2,temp) /*对学生姓名进行顺序查找*/
person b2[];
person *temp;
{ int i,j;
char ch;
do
{ printf("请输入要查找的学生姓名:\n");
gets(temp->name);
i=1;
while(strcmp(b2[i].name,temp->name)!=0)
{ i++;
if(i==Q+1)
{ printf("查找失败!\n");
break;
}
}
if(strcmp(b2[i].name,temp->name)==0)
{ printf("该学生的信息为:\n");
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
printf("%d\t%s\t%d\t%s\t%s\t",b2[i].num,b2[i].name,b2[i].age,b2[i].sex,b2[i].dep);
for(j=0;j<K;j++)
printf("%d\t",b2[i].cour[j]);
}
printf("\n是否继续查找?\n");
ch=getchar(); getchar();
} while(ch=='y');
printf("按4键返回上一级菜单!\n");
}
INNAME2(b2) /*对学生姓名进行二分查找*/
person b2[];
{ int i,j;
for(i=2;i<Q+1;i++)
{ b2[0]=b2[i];
j=i-1;
while(strcmp(b2[0].name,b2[j].name)<0)
b2[j+1]=b2[j--];
b2[j+1]=b2[0];
}
}
BINSEAR2(b2,temp)
person b2[];
person *temp;
{ char ch;
int j,low,mid,high;
INNAME2(b2);
do
{ low=1; high=Q;
printf("请输入要查找的学生姓名:\n");
gets(temp->name);
while(low<=high)
{ mid=(low+high)/2;
if(strcmp(temp->name,b2[mid].name)==0)
{ printf("该学生的信息为:\n");
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
printf("%d\t%s\t%d\t%s\t%s\t",b2[mid].num,b2[mid].name,b2[mid].age,b2[mid].sex,b2[mid].dep);
for(j=0;j<K;j++)
printf("%d\t",b2[mid].cour[j]);
break;
}
if(strcmp(temp->name,b2[mid].name)<0)
high=mid-1;
else
low=mid+1;
}
if(low>high)
{ printf("查找失败!\n");
printf("是否继续查找?\n");
ch=getchar(); getchar();
}
else
{ printf("\n是否继续查找?\n");
ch=getchar(); getchar();
}
} while(ch=='y');
printf("按4键返回上一级菜单!\n");
}
person *INSEAR2(t,s) /*对学生姓名进行二叉排序树查找*/
person *t;
person *s;
{ person *f;
person *p;
strcpy(p->name,t->name);
while(strlen(p->name)!=NULL)
{ strcpy(f->name,p->name);
if(strcmp(s->name,p->name)==0)
printf("无须插入!\n");
return(t);
if(strcmp(s->name,p->name)<0)
p=p->lchild;
else
p=p->rchild;
}
if(strlen(t->name)==NULL)
return(s);
if(strcmp(s->name,f->name)<0)
f->lchild=s;
else
f->rchild=s;
return(t);
}
CREAT2(t)
person *t;
{ int i;
person b2[100];
person s[100];
t=NULL;
for(i=1;i<Q+1;i++)
{ strcpy(s[i].name,b2[i].name);
t=INSEAR2(t,s[i]);
}
}
BSTSEAR2(b2)
person b2[];
{ int i=1,j=0;
char ch;
person *temp;
CREAT2(T);
do
{ printf("请输入要查找的学生姓名:\n");
gets(temp->name);
while(T!=NULL)
{ if(strcmp(T->name,temp->name)==0)
{ printf("该学生的信息为:\n");
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
printf("%d\t%s\t%d\t%s\t%s\t",b2[i].num,b2[i].name,b2[i].age,b2[i].sex,b2[i].dep);
for(j=0;j<K;j++)
printf("%d\t",b2[i].cour[j]);
break;
}
if(strcmp(T->name,temp->name)>0)
T=T->lchild;
else
T=T->rchild;
}
printf("查找失败!\n");
printf("是否继续查找?\n");
ch=getchar(); getchar();
} while(ch=='y');
printf("按4键返回上一级菜单!\n");
}
SEQSEAR3(b3,temp) /*对学生年龄进行顺序查找*/
person b3[];
person *temp;
{ int i,j;
char ch;
do
{ printf("请输入要查找的学生年龄:\n");
scanf("%d",&temp->age);
i=1;
while(temp->age!=b3[i].age)
{ i++;
if(i==Q+1)
{ printf("查找失败!\n");
break;
}
}
if(temp->age==b3[i].age)
{ printf("该学生的信息为:\n");
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
printf("%d\t%s\t%d\t%s\t%s\t",b3[i].num,b3[i].name,b3[i].age,b3[i].sex,b3[i].dep);
for(j=0;j<K;j++)
printf("%d\t",b3[i].cour[j]);
}
printf("\n是否继续查找?\n");
getchar(); ch=getchar();
} while(ch=='y');
printf("按4键返回上一级菜单!\n");
ch=getchar();
}
INNAME3(b3) /*对学生年龄进行二分查找*/
person b3[];
{ int i,j;
for(i=2;i<Q+1;i++)
{ b3[0]=b3[i];
j=i-1;
while(b3[0].age<b3[j].age)
b3[j+1]=b3[j--];
b3[j+1]=b3[0];
}
}
BINSEAR3(b3,temp)
person b3[];
person *temp;
{ char ch;
int j,low,mid,high;
INNAME3(b3);
do
{ low=1; high=Q;
printf("请输入要查找的学生年龄:\n");
scanf("%d",&temp->age);
while(low<=high)
{ mid=(low+high)/2;
if(temp->age==b1[mid].age)
{ printf("该学生的信息为:\n");
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
printf("%d\t%s\t%d\t%s\t%s\t",b3[mid].num,b3[mid].name,b3[mid].age,b3[mid].sex,b3[mid].dep);
for(j=0;j<K;j++)
printf("%d\t",b3[mid].cour[j]);
break;
}
if(temp->age<b3[mid].age)
high=mid-1;
else
low=mid+1;
}
if(low>high)
{ printf("查找失败!\n");
printf("是否继续查找?\n");
getchar(); ch=getchar();
}
else
{ printf("\n是否继续查找?\n");
getchar(); ch=getchar();
}
} while(ch=='y');
printf("按4键返回上一级菜单!\n");
ch=getchar();
}
person *INSEAR3(t,s) /*对学生年龄进行二叉排序树查找*/
person *t;
person *s;
{ person *f;
person *p;
p->age=t->age;
while(p->age!=NULL)
{ f->age=p->age;
if(s->age==p->age)
printf("无须插入!\n");
return(t);
if(s->age<p->age)
p=p->lchild;
else
p=p->rchild;
}
if(t->age==NULL)
return(s);
if(s->age<f->age)
f->lchild=s;
else
f->rchild=s;
return(t);
}
CREAT3(t)
person *t;
{ int i;
person b3[100];
person s[100];
t=NULL;
for(i=1;i<Q+1;i++)
{ s[i].age=b1[i].age;
t=INSEAR1(t,s[i]);
}
}
BSTSEAR3(b3)
person b3[];
{ int i=1,j=0;
char ch;
person *temp;
CREAT3(T);
do
{ printf("请输入要查找的学生学号:\n");
scanf("%d",&temp->age);
while(T!=NULL)
{ if(T->age==temp->age)
{ printf("该学生的信息为:\n");
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
printf("%d\t%s\t%d\t%s\t%s\t",b3[i].num,b3[i].name,b3[i].age,b3[i].sex,b3[i].dep);
for(j=0;j<K;j++)
printf("%d\t",b3[i].cour[j]);
break;
}
if(T->age>temp->age)
T=T->lchild;
else
T=T->rchild;
}
printf("查找失败!\n");
printf("是否继续查找?\n");
getchar(); ch=getchar();
} while(ch=='y');
printf("按4键返回上一级菜单!\n");
ch=getchar();
}
main()
{
menu1();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -