//这个可以吗
#include
#include
#define N 100
struct STUDENT
{
char id[20];
char name[20];
};
typedef struct STUDENT Student;
void inputdata(Student student[],int n);
void sort(Student student[],int n);
void search(Student student[],int n);
void main()
{
Student student[N];
inputdata(student,N);
sort(student,N);
search(student,N);
}
void inputdata(Student student[],int n)
{
int i;
for(i=0;i
printf("第%d个学生n",i+1);
printf("请输入学号:");
scanf("%s",student[i].id);
printf("请输入姓名");
scanf("%s",student[i].name);
}
}
//选择排序
void sort(Student student[],int n)
{
int i,j,t;
Student temp;
for(i=0;i
t=i;
for(j=i+1;j<=n-1;j++)
{
if(strcmp(student[t].id,student[j].id)>0)
{
t=j;
}
}
if(t!=i)
{
temp = student[i];
student[i] = student[t];
student[t] = temp;
}
}
printf("排序后为:\n");
for(i = 0;i
printf("学号:%s\t姓名为:%s\n",student[i].id,student[i].name);
}
}
//折半查找
void search(Student student[],int n)
{
char id[20];
int high,mid,low,flag =1;
high=n-1;
low=0;
printf("请输入你要查找的学号:\n");
scanf("%s",id);
while(low<=high)
{
mid = (high +low)/2;
if(strcmp(id,student[mid].id)>0)
{
low = mid +1;
}
else if(strcmp(id,student[mid].id)<0)
{
high = high -1;
}
else
{
printf("在第%d上找到\n",mid+1);
printf("学号:%s\t姓名:%s\n",student[mid].id,student[mid].name);
flag = 0;
break;
}
}
if(flag)
{
printf("无此学号\n");
}
}
void main()
{
inputdata();
sort(学号);
search(学号,姓名);
return 0;
}
//主函数完毕