问题描述
- C语言--有木有大神帮帮看看我的折半法代码,已经自己研究了好长时间,还是弄不出来???
-
#include
#include
#define M 3
void inputName(char name[][121],double money[]);
void ouput(char name[][121],double money[]);
void sortPay(char name[][121],double money[]);
void sortName(char name[][121],double money[]);
int zhe(char name[][121],double money[]);
void main()
{
char name[M][121];
double money[M]={0};
char m[121];
int g;
inputName(name,money);
printf("输出原样:n");
ouput(name,money);
sortPay(name,money);
printf("按工资输出:n");
ouput(name,money);
sortName(name,money);
printf("按姓名输出:n");
ouput(name,money);
printf("请输入要查找的职工姓名:");
gets(m);
g=zhe(name,money,m);
if(g!=-1)
{
printf("输出该职工%sn",m);
}
else
{
printf("没有此人n");
}}
//写一个函数,输入m个职工的姓名和工资
void inputName(char name[][121],double money[])
{
int i;
for(i=0;i
{
printf("输出职工姓名:");
scanf("%s",&name[i]);
printf("输入职工工资:");
scanf("%lf",&money[i]);
getchar();
}
printf("n");
}
//写一个函数,输出m个职工的姓名和工资
void ouput(char name[][121],double money[])
{
int i;
for(i=0;i
{
printf("%s %gn",name[i],money[i]);
}
}
//写一个函数,对m个职工的工资进行升序排列,姓名也随着调整
void sortPay(char name[][121],double money[])
{
int i,j;
double t;
char x[121];
for(i=1;i
{
for(j=0;j
{
if(money[j]
{
t=money[j];
money[j]=money[j+1];
money[j+1]=t;
strcpy(x,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],x);
}
}
}
}
//写一个函数,对m个职工的姓名进行升序排列,工资也随着调整
void sortName(char name[][121],double money[])
{
int i,j;
char xm[121];
double t;
for(i=1;i
{
for(j=0;j
{
if(strcmp(name[j],name[j+1])
{
strcpy(xm,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],xm);
t=money[j];
money[j]=money[j+1];
money[j+1]=t;
}
}
}
}
//写一个函数,findByName,用折半法按姓名查找指定的职工,找到返回数组下标,找不到返回-1
int zhe(char name[][121],double money[],char m[])
{
int top,bottom,mid;
top=0;
bottom=M-1;
mid=(top+bottom)/2;
while(top
{
mid=(top+bottom)/2;
if(strcmp(m,name[mid][121])
{
top=mid+1;
}
else if(strcmp(m,name[mid][121])>0)
{
bottom=mid-1;
}
else
{
return mid;
}} return -1;
解决方案
zhe函数里两个strcmp应该都改为strcmp(m,name[mid])<0吧?