题目描述
用函数分别实现下列的功能:
(1) 输入10个职工的姓名和职工号;
(2) 按照职工号由小到大的顺序排序,注意需要随之调整姓名顺序;
(3) 输入一个职工号,用折半查找法找出该职工的姓名,要求通过主函数输入要查找的职工号,同时从主函数输出该职工的姓名。
输入
共有11行。
前10行中的每一行包含了一个职工的姓名和职工号。姓名是一个不包含空格且长度不超过20的字符串,职工号是一个不小于0且不大于1000的整数。
最后一行包含一个职工号,表示需要查找姓名的职工。保证需要查找的职工号一定出现在已经输入的10个职工信息中。
输出
共有11行。
前10行每一行输出按照职工号从小到大排序后的职工信息,包括姓名和职工号,用一个空格隔开。
最后一行输出查找到的职工姓名。
请注意行尾输出换行。
菜鸟的二分练习:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
char a[21];
int b;
}name[12];
int cmp(node n,node m)
{
return n.b<m.b;
}
int binary_search(int k)
{
int l=0,r=9;
int z=20;
while(r-l>=1)
{
int i=(l+r)/2;
if(name[i].b==k) return i;
else if(name[i].b<k) l=r/2+1;
else r=i;
}
return z;
}
int main()
{
int k;
for(int i=0;i<10;i++)
scanf("%s %d",&name[i].a,&name[i].b);
scanf("%d",&k);
sort(name,name+10,cmp);
int j=binary_search(k);
for(int i=0;i<10;i++)
printf("%s %d\n",name[i].a,name[i].b);
printf("%s\n",name[j].a);
return 0;
}