实现代码如下:
// 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(\(n^2\))
运算结果为
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");
}
标签:arr,21,23,int,28,C++,65,简单,冒泡排序
From: https://www.cnblogs.com/succodes/p/17192607.html