#include <stdio.h>
#include <string.h>
#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<n;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<n-1;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<N;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");
}
}