知识点
冒泡排序法的执行步骤
(1)从数组末尾开始依次比较相邻的两个元素,如果大小关系相反则交换位置( Aj<Aj−1 )
(2)如果步骤1没有交换过,则结束算法,否则执行步骤(1)
小结
时间复杂度 O(n2) ,空间复杂度 O(n) , 是稳定排序
问题链接
问题内容
计算出数列A进行冒泡排序过程中交换元素的次数和排序完的数列
思路
在冒泡排序法交换元素后累加即可
代码
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
// 冒泡排序法
int bubbleSort(int A[], int n) {
int cnt = 0;
// 标记是否需要继续冒泡
int flag = 1;
for (int i = 0; flag; i++) {
flag = 0;
for (int j = n - 1; j >= i + 1; j--) {
// 交换两个相邻的元素
if (A[j] < A[j - 1]) {
swap(A[j], A[j - 1]);
flag = 1;
cnt++;
}
}
}
return cnt;
}
int main() {
int n, A[110];
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &A[i]);
int cnt = bubbleSort(A, n);
for (int i = 0; i < n; i++)
printf("%d%c", A[i], i == n - 1 ? '\n' : ' ');
printf("%d\n", cnt);
return 0;
}