C语言编写:1.输入5个职工的姓名和职工号 2.按职工号由小到大进行排序,姓名也随之排序 3.要求输入职工号,用折半查找法进行查找,主函数输入。
时间: 2024-05-16 22:16:35 浏览: 108
以下是C语言的代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NUM 5 // 职工数量的最大值
// 职工结构体
typedef struct {
char name[20];
int id;
} Employee;
// 折半查找函数
int binarySearch(Employee emp[], int num, int key) {
int low = 0, high = num - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (emp[mid].id == key) {
return mid;
} else if (emp[mid].id < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // 没有找到
}
// 插入排序函数
void insertSort(Employee emp[], int num) {
int i, j;
Employee temp;
for (i = 1; i < num; i++) {
temp = emp[i];
for (j = i; j > 0 && emp[j - 1].id > temp.id; j--) {
emp[j] = emp[j - 1];
}
emp[j] = temp;
}
}
int main() {
Employee emp[MAX_NUM];
int i, key, index;
printf("请输入%d个职工的姓名和职工号:\n", MAX_NUM);
for (i = 0; i < MAX_NUM; i++) {
printf("第%d个职工:\n", i + 1);
scanf("%s%d", emp[i].name, &emp[i].id);
}
insertSort(emp, MAX_NUM); // 按职工号排序
printf("\n排序后的职工信息为:\n");
for (i = 0; i < MAX_NUM; i++) {
printf("姓名:%s\t职工号:%d\n", emp[i].name, emp[i].id);
}
printf("\n请输入您要查找的职工号:\n");
scanf("%d", &key);
index = binarySearch(emp, MAX_NUM, key); // 折半查找
if (index == -1) {
printf("没有找到职工号为%d的职工!\n", key);
} else {
printf("职工号为%d的职工是:%s\n", key, emp[index].name);
}
return 0;
}
```
运行结果示例:
```
请输入5个职工的姓名和职工号:
第1个职工:
Alice 123
第2个职工:
Bob 456
第3个职工:
Charlie 234
第4个职工:
David 789
第5个职工:
Eva 345
排序后的职工信息为:
姓名:Alice 职工号:123
姓名:Charlie 职工号:234
姓名:Eva 职工号:345
姓名:Bob 职工号:456
姓名:David 职工号:789
请输入您要查找的职工号:
345
职工号为345的职工是:Eva
```
阅读全文