此处折半咋找为何失效,输入职工号却无法打印出对应工号的名字。
/* 11、写几个函数:1、输入10个职工的姓名和职工号;
2、按职工号由小到大顺序排序,姓名跟随顺序也随之调整;
3、要求输入一个职工号,用折半查找法找出该职工的姓名,并输出该姓名。从主函数输入要查找的职工号。
*/
#include"stdio.h"
#include "string.h"
#define M 50
#define size 10
int input(int num[],char name[10][8])
{
int i;
for(i=0;i<10;i++)
{
printf("input NO.:");
scanf("%d",&num[i]);
printf("Input name:");
getchar();//(清空缓冲区里关于No.的数值)等用户按下回车后从从键盘缓冲区中逐个读取姓名类的字符*/
gets(name[i]);
}
}
/*按职工号由小到大顺序排序,姓名顺序也随之调整*/
void sort(int num[],char name[10][8])
{
int i,j,temp;
char s[M];
for(i=0;i<10;i++)
for(j=0;j<10-i;j++)
{
if(num[j]>num[j+1])
{
temp=num[j];
strcpy(s,name[j]);
num[j]=num[j+1];
strcpy(name[j],name[j+1]);
num[j+1]=temp;
strcpy(name[j+1],s);
}
}
printf("After sorted:\n");
for(i=0;i<10;i++)
printf("\n%d %s",num[i],name[i]);
}
/*升序的折半查找(查找职工号)*/
int search(int num[size],char name[10][8],int n)
{
int low=0,high=size-1,mid;
int flag,sign;
if(n<num[0]||n>num[size-1])
sign=0;//所查找的数不存在
while(low<high)
{
mid=(low+high)/2;
if(n<num[mid])
high=mid-1;
else if(n>num[mid])
low=mid+1;
else
{
return mid;
flag=1;//折半查找成功的标志
}
}
if(flag==1)
printf("No.:%d,his name:%s\n",n,name[mid]);
if(sign==0||flag==0)//查找的数不存在
printf("Error!%d can not be found!",n);
}
int main()
{
int num[10],number;
char name[10][8];
input(num,name);
sort(num,name);
printf("\ninput a number you want to refer:\n");
scanf("%d",&number);
search(num,name,number);
return 0;
}