写几个函数:
一.输入10个职工的姓名和职工号;
二.按职工号由小到大顺序排序,姓名顺序也随之调整;
三.要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职 工号,输出该职工姓名。
#include <stdio.h>
#include <string.h>
// 职工信息结构体
typedef struct {
char name[50];
int id;
} Employee;
// 按职工号排序
void sort_employees(Employee employees[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (employees[j].id > employees[j + 1].id) {
Employee temp = employees[j];
employees[j] = employees[j + 1];
employees[j + 1] = temp;
}
}
}
}
// 折半查找职工姓名
char* binary_search(Employee employees[], int n, int id) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (employees[mid].id == id) {
return employees[mid].name;
} else if (employees[mid].id < id) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return NULL;
}
int main() {
Employee employees[10];
printf("输入10个职工的姓名和职工号:\n");
for (int i = 0; i < 10; i++) {
printf("职工%d:\n", i + 1);
printf("姓名:");
scanf("%s", employees[i].name);
printf("职工号:");
scanf("%d", &employees[i].id);
}
sort_employees(employees, 10);
int search_id;
printf("输入要查找的职工号:");
scanf("%d", &search_id);
char *name = binary_search(employees, 10, search_id);
if (name != NULL) {
printf("职工姓名:%s\n", name);
} else {
printf("未找到职工号为%d的职工\n", search_id);
}
return 0;
}
解释说明:
处理职工信息:
- 函数
sort_employees
按职工号排序。 - 函数
binary_search
使用折半查找法根据职工号查找职工姓名。 - 主函数输入10个职工的姓名和职工号,调用
sort_employees
函数排序,再输入要查找的职工号并调用binary_search
函数输出职工姓名。