请用C++帮我实现统计打卡数量top5的员工
时间: 2024-05-05 08:20:19 浏览: 40
好的,我可以给您提供一个简单的实现。假设我们有一个员工列表,每个员工都有一个姓名和打卡次数。我们可以定义一个结构体来表示员工信息:
```
typedef struct {
char name[50]; // 姓名
int count; // 打卡次数
} Employee;
```
接下来,我们可以用一个数组来存储员工信息:
```
Employee employees[100];
int numEmployees = 0;
```
然后,我们可以从文件中读取员工信息,并根据打卡次数对员工进行排序。这里我们可以用快速排序算法:
```
void quicksort(Employee arr[], int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
quicksort(arr, low, pivot - 1);
quicksort(arr, pivot + 1, high);
}
}
int partition(Employee arr[], int low, int high) {
Employee pivot = arr[low];
int i = low + 1;
int j = high;
while (i <= j) {
while (i <= j && arr[i].count >= pivot.count) {
i++;
}
while (i <= j && arr[j].count < pivot.count) {
j--;
}
if (i < j) {
Employee tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
Employee tmp = arr[low];
arr[low] = arr[j];
arr[j] = tmp;
return j;
}
```
最后,我们可以打印出打卡数量前五的员工:
```
quicksort(employees, 0, numEmployees - 1);
for (int i = 0; i < 5 && i < numEmployees; i++) {
printf("%s: %d\n", employees[i].name, employees[i].count);
}
```
这里我们只打印前五个员工,如果员工数量不足五个则全部打印。
阅读全文