C++でバブルソートの問題であるAIZU ONLINE JUDGEのALDS_1_2_Aを解きました。



問題


数列 A を読み込み、バブルソートで昇順に並び変え出力するプログラムを作成してください。また、バブルソートで行われた要素の交換回数も報告してください。


入力例


入力の最初の行に、数列の長さを表す整数 N が与えられます。2行目に、N 個の整数が空白区切りで与えられます。

5
5 3 2 4 1


出力例


出力は 2 行からなります。1行目に整列された数列を 1 行に出力してください。数列の連続する要素は1つの空白で区切って出力してください。2 行目に交換回数を出力してください。
1 2 3 4 5
8

https://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/2/ALDS1_2_Aより



バブルソートを実装する


#include <iostream>
#include <cmath>

using namespace std;

void bubbleSort(int *A, int n){
int count = 0;
int flag = 1;
while(flag){
flag = 0;
for(int i=n-1; i>=0; --i){
if (A[i] < A[i-1]){
swap(A[i], A[i-1]);
count++;
flag = 1;
}
}
}
for(int i=0; i<n-1; ++i){
cout << A[i] << " ";
}
cout << A[n-1] << endl;
cout << count << endl;
}

int main(void){
int n;
cin >> n;
int* A = new int[n];
for (int i=0; i<n; ++i){
cin >> A[i];
}
bubbleSort(A, n);
delete[] A;
return 0;
}