这个问题要求我们书写几个函数: 1) 输入10个职工的姓名和职工号; 2) 按职工号从小到大排序,姓名也相应改变顺序; 3) 要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工的职工号,输出该职工的姓名。
时间: 2024-04-30 19:17:28 浏览: 38
好的,这是一个基础的程序设计问题,我可以为您提供一份解答。
以下是示例代码:
```
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
// 员工信息结构体
struct Employee {
string name; // 姓名
int id; // 职工号
};
// 比较函数,用于排序
bool cmp(Employee a, Employee b) {
return a.id < b.id;
}
// 折半查找函数,返回找到的员工在数组中的下标
int binarySearch(Employee arr[], int n, int targetId) {
int l = 0, r = n-1;
while (l <= r) {
int mid = (l + r) / 2;
if (arr[mid].id == targetId)
return mid;
else if (arr[mid].id < targetId)
l = mid + 1;
else
r = mid - 1;
}
return -1; // 没有找到
}
int main() {
Employee arr[10];
cout << "请输入10个职工的姓名和职工号:\n";
for (int i = 0; i < 10; ++i) {
cin >> arr[i].name >> arr[i].id;
}
sort(arr, arr+10, cmp); // 按职工号排序
cout << "按职工号排序后的员工名单:\n";
for (int i = 0; i < 10; ++i) {
cout << arr[i].name << " " << arr[i].id << endl;
}
int targetId;
cout << "请输入要查找的职工号:\n";
cin >> targetId;
int idx = binarySearch(arr, 10, targetId);
if (idx == -1)
cout << "没有找到该职工!\n";
else
cout << "该职工的姓名为:" << arr[idx].name << endl;
return 0;
}
```
请注意,这只是一个示例程序,有些细节可能需要根据具体情况进行调整。
阅读全文