用c语言实现由于人员有限,搬运工把物资箱顺次摆在了一个足够长的单层货架上, 如图 1 所示。为了进一步发放物资,须对该批物资进行分类(将种类相同的物资 放到一起)。请设计一个非递归算法/程序(且时间复杂度为 O(n)或 O(n2 )),对该 批物资进行排序(分类)。分类结果(算法的输出为分类后的物资序列)如图 2 所示。 字符说明:手套用 G 表示,口罩用 M 表示,防护服用 C 表示 输入:G M G C G G C M M C G… //回车为结束符 输出:M M M… G G G… C C C
时间: 2024-03-23 07:43:19 浏览: 153
以下是该算法的 C 语言实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
int main() {
char input[MAX_SIZE];
char buckets[3][MAX_SIZE];
int bucket_sizes[3] = {0, 0, 0};
char *delim = " ";
char *token;
fgets(input, MAX_SIZE, stdin); // 读取输入字符串
token = strtok(input, delim); // 分割字符串
// 将物资放入对应的桶中
while (token != NULL) {
if (strcmp(token, "G") == 0) {
strcpy(buckets[0] + bucket_sizes[0], token);
bucket_sizes[0]++;
} else if (strcmp(token, "M") == 0) {
strcpy(buckets[1] + bucket_sizes[1], token);
bucket_sizes[1]++;
} else if (strcmp(token, "C") == 0) {
strcpy(buckets[2] + bucket_sizes[2], token);
bucket_sizes[2]++;
}
token = strtok(NULL, delim);
}
// 按照桶的顺序输出物资
for (int i = 0; i < 3; i++) {
for (int j = 0; j < bucket_sizes[i]; j++) {
printf("%s ", buckets[i] + j);
}
}
printf("\n"); // 输出换行符
return 0;
}
```
该算法的时间复杂度为 O(n),其中 n 是物资的数量。
阅读全文