RT,主要是我的soar排序函数没有作用。
还有我的二分法BinarySerach的也没有作用。
我单步调试过好像是soar和BinarySearch里的strcmp那里出了问题,但是我确实不知道是什么问题
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 10
#define SIZE 20
//职工的姓名和职工号
typedef struct staff{
char name[LEN];
char num[SIZE];
} STAFF;
void Input(STAFF *a);
void soar(STAFF *a);
int BinarySearch(char num[], STAFF *a);
int main(void)
{
STAFF a[LEN];//存放员工信息
char num[SIZE];//
int get;
Input(a);
soar(a);
printf("Please input the number you want:\n");
gets(num);
if ((get = BinarySearch(num, a)) != -1)
printf("The number is %s and the name is %s.\n", a[get].num, a[get].name);
else
printf("There is not the person.\n");
return 0;
}
//输入10个职工的姓名和职工号
void Input(STAFF *a)
{
int i;
for (i = 0; i < LEN; ++i)
{
printf("Please input the numbers and name of every staff.\n");
scanf("%s %s", a[i].name, a[i].num);
while (getchar() != '\n')
continue;
}
}
//按职工号由小到大顺序排序,姓名也随之调整
void soar(STAFF *a)
{
int i, j;
STAFF b;
//冒泡排序
for (i = 0; i < LEN - 1; i++)
{
for (j = 0; j < LEN - 1 - i; j++)
{
if (strcmp(a[j].num, a[j + 1].num) > 0)
{
b = a[j];
a[j] = a[j + 1];
a[j + 1] = b;
}
}
}
}
//通过主函数输入的职工号,用二分法找到该员工
int BinarySearch(char num[], STAFF *a)
{
int low = 0;
int high = LEN - 1;
int mid;
while (high >= low)
{
mid = low + (high - low) / 2;
if (strcmp(num, a[mid].num) > 0)
low = mid + 1;
else if ((strcmp(num, a[mid].num) < 0))
high = mid - 1;
else
return mid;
}
return -1;
}