输入 数量n n个数据
输出 冒泡排序后的数据 交换的次数
前i个视为已完成排序的数据,从n-1向i+1 遍历 每次将最小的冒泡至前面
Constraints
1 ≤ N ≤ 100
Sample Input 1
5
5 3 2 4 1
Sample Output 1
1 2 3 4 5
8
Sample Input 2
6
5 2 4 6 1 3
Sample Output 2
1 2 3 4 5 6
9
#include <cstdio>
#include <algorithm>
using namespace std;
void print_A(int A[],int n){
for (int i = 0 ;i<n;i++) {
if (i!=n-1 )printf("%d ",A[i]);
else printf("%d",A[i]);
}
printf("\n");
return ;
}
int bubblesort(int A[],int n){
int count=0;
for (int i =0 ;i<n;i++){
for(int j=n-1;j>=i+1;j--){
if(A[j-1]>A[j]) {swap(A[j-1], A[j]);count++;}
}
}
return count;
}
int main (){
int n,A[110];
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&A[i]);
int a = bubblesort(A,n);
print_A(A,n);
printf("%d\n",a);
return 0;
}
错点:
1. for(int j=n-1;j>=i+1;j--) 其中j>=i+1 否则在调用i-1时,当i=0时会越界
2.最后输出的交换次数的时候要输出换行符