pta冒泡排序
时间: 2025-05-29 16:04:25 浏览: 117
### PTA平台上的冒泡排序实现
以下是基于PTA平台需求的冒泡排序实现代码,支持对整数和字符串进行排序:
#### 整数冒泡排序实现
此代码实现了针对整数数组的冒泡排序算法,并按照指定次数 `K` 进行部分排序。
```c
#include<stdio.h>
int main() {
int N, K;
scanf("%d %d", &N, &K);
int array[100] = {0};
// 输入数组元素
for (int i = 0; i < N; i++) {
scanf("%d", &array[i]);
}
// 执行 K 次冒泡排序
for (int i = 0; i < K; i++) {
for (int j = 0; j < N - i - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
// 输出排序后的数组
for (int i = 0; i < N; i++) {
if (i != 0) {
printf(" ");
}
printf("%d", array[i]);
}
return 0;
}
```
这段代码的核心逻辑是对长度为 `N` 的整数数组执行最多 `K` 轮冒泡排序操作。每一轮都会将当前未排序部分的最大值移动到最后位置[^3]。
---
#### 字符串冒泡排序实现
对于字符串类型的冒泡排序,可以使用类似的思路,借助标准库函数 `strcmp` 和 `strcpy` 来完成字符串比较与交换的操作。
```c
#include<stdio.h>
#include<string.h>
int main() {
int N, K;
scanf("%d %d", &N, &K);
char str[100][11];
// 输入字符串数组
for (int i = 0; i < N; i++) {
scanf("%s", str[i]);
}
// 执行 K 次冒泡排序
for (int i = 0; i < K; i++) {
for (int j = 0; j < N - i - 1; j++) {
if (strcmp(str[j], str[j + 1]) > 0) {
char temp[11];
strcpy(temp, str[j]);
strcpy(str[j], str[j + 1]);
strcpy(str[j + 1], temp);
}
}
}
// 输出排序后的字符串
for (int i = 0; i < N; i++) {
puts(str[i]);
}
return 0;
}
```
该代码片段展示了如何利用 C 语言中的字符串处理功能来实现冒泡排序。通过调用 `strcmp` 函数判断两个字符串大小关系,并使用 `strcpy` 完成字符串复制与交换[^4]。
---
### 关键点解析
1. **冒泡排序基本原理**
冒泡排序是一种简单的排序算法,它重复地遍历待排序列表,每次比较相邻两项并根据条件交换顺序。经过多次迭代后,较大的项会逐渐向序列末端“冒泡”,最终达到完全有序状态[^2]。
2. **优化策略**
如果某轮次中没有任何元素发生交换,则说明剩余部分已经处于正确的位置,此时可提前终止循环以提高效率[^1]。
3. **适用场景**
冒泡排序适合用于小型数据集或者接近已排序的数据集合,在实际应用中由于时间复杂度较高(O(n²)),通常不推荐应用于大规模数据处理场合。
---
阅读全文
相关推荐


















