写几个函数:
1.输入10个职工的姓名和职工号
2.按职工号由小到大顺序排序,姓名顺序也随之调整
3.要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
折半查找法 :现将数组排序,最小端记作low,最大端记作high,中间记作mid
将mid与与待查找元素进行比较,等于则成功输出mid;大于则high=mid-1;小于则high=mid+1
#include<stdio.h>
struct student
{
char name[10];
int num;
} stu[10];//结构体int main()
{
void input(struct student stu[]);
void sort(struct student stu[],int n);
void search(struct student stu[],int n);
int n;
input(stu);
sort(stu,10);
printf("\nenter the number of the person:\n");
scanf("%d",&n);
search(stu,n);
return 0;
}
void input(struct student stu[]) //输入函数{
int i;
printf("please enter :\n");
for(i=0;i<10;i++)
scanf("%s%d",&stu[i].name ,&stu[i].num);
}
void sort(struct student stu[10],int n)//排序从小到大
{
int i,k,j;
struct student p;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(stu[k].num>stu[j].num) k=j;
p=stu[k];stu[k]=stu[i];stu[i]=p;
}
for(i=0;i<10;i++)
printf("%s ",stu[i].name );
}
void search(struct student stu[],int n)//搜索函数,折半法
{
int low=0,high=9,mid;
while(low<=high)
{
mid=(high+low+1)/2;
if(n==stu[mid].num)
break;
else if(n>stu[mid].num )
low=mid+1;
else high=mid-1;
}
if(low<=high) printf("%s %d",stu[mid].name ,stu[mid].num );
else
printf("no one");
}