求用二维数组解决此问题
写几个函数:1.输入10个职工的姓名和职工号;2.按职工号由小到大顺序排序,姓名顺序也随之调整;3.要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。我只会一维数组。。。求解用二维数组,最好带注释,谢谢!
程序代码:
#include<stdio.h>
#include<string.h>
struct employee
{
int number;
char name[20];
};
int main()
{
int i,j;
int t,n;
char c[20];
employee emp[10];
//职工信息的录入
for(i=0;i<10;i++)
{
printf("请输入职工的姓名:");
scanf("%s",emp[i].name);
printf("请输入职工的编号:");
scanf("%d",&emp[i].number);
}
//对职工进行按工号排序
for(i=1;i<10;i++)
for(j=0;j<9;j++)
if(emp[j].number>emp[j+1].number)
{
t=emp[j].number;
emp[j].number=emp[j+1].number;
emp[j+1].number=t;
strcpy(c,emp[j].name);
strcpy(emp[j].name,emp[j+1].name);
strcpy(emp[j].name,c);
}
//输出排序后的职工信息
for(i=0;i<10;i++)
{
printf("职工编号:%d\n",emp[i].number);
printf("姓名:%s\n",emp[i].name);
}
//以下是查找部分,采用折半查找
printf("请输入要查找职工的工号:");
scanf("%d",&n);
int m,m1,m2;
m=10/2;
m1=0;
m2=10;
while(m1!=m2)
{
if(n<emp[0].number||n>emp[9].number)
break;
if(n==emp[m].number)
{
printf("所查找的职工的姓名是:%s\n",emp[m].name);
return 1;
}
else if(n>emp[m].number)
{
m1=m;
m=(m1+m2)/2;
}
else
{
m2=m;
m=(m1+m2)/2;
}
}
printf("没有找到该编号对应的职工。\n");
return 0;
}
