冒泡排序(简单C++实现)
实现代码如下:
// bubble_sort.cpp
#include <stdio.h>
void printArray(int arr[], int len);
// 冒泡排序:最多进行n-1次排序
int main() {
int arr[] = {23,39,65,28,5,3,34,75,21};
int arrLen = sizeof(arr) / sizeof(arr[0]);
int temp;
for (int i = 0; i < arrLen - 1; i++) {
for (int j = 0; j < arrLen - i - 1; j++) {
if (arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
printf("这是第%d次排序", i);
printArray(arr,arrLen);
}
return 0;
}
void printArray(int arr[], int length) {
for (int i = 0; i < length; i++) {
printf("%d,",arr[i]);
}
printf("\n");
}
这个代码的时间复杂度为O()
运算结果为
C:\1\C++\bubble_sort\cmake-build-debug\bubble_sort.exe
这是第0次排序23,39,28,5,3,34,65,21,75,
这是第1次排序23,28,5,3,34,39,21,65,75,
这是第2次排序23,5,3,28,34,21,39,65,75,
这是第3次排序5,3,23,28,21,34,39,65,75,
这是第4次排序3,5,23,21,28,34,39,65,75,
这是第5次排序3,5,21,23,28,34,39,65,75,
这是第6次排序3,5,21,23,28,34,39,65,75,
这是第7次排序3,5,21,23,28,34,39,65,75,
进程已结束,退出代码为 0
可以看到第7次排序都是不必要的
修改代码
加入flag
// bubble_sort.cpp
#include <stdio.h>
void printArray(int arr[], int len);
int main() {
int arr[] = {23,39,65,28,5,3,34,75,21};
int arrLen = sizeof(arr) / sizeof(arr[0]);
int temp, flag;
for (int i = 0; i < arrLen - 1; i++) {
flag = 0;
for (int j = 0; j < arrLen - i - 1; j++) {
if (arr[j] > arr[j+1]) {
flag = 1;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
printf("这是第%d次排序", i);
printArray(arr,arrLen);
if (flag == 0) {// 若一次外层循环中都不交换(已经排好序了),则退出循环
break;
}
}
return 0;
}
void printArray(int arr[], int length) {
for (int i = 0; i < length; i++) {
printf("%d,",arr[i]);
}
printf("\n");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构