C++で選択ソートの問題であるAIZU ONLINE JUDGEのALDS_1_2_Bを解きました。
数列Aを読み込み、選択ソートのアルゴリズムで昇順に並び替え出力するプログラムを作成してください。
入力の最初の行に、数列の長さを表す整数 N が与えられます。2行目に、N 個の整数が空白区切りで与えられます。
出力は 2 行からなります。1行目に整列された数列を 1 行に出力してください。数列の連続する要素は1つの空白で区切って出力してください。2 行目に交換回数を出力してください。
https://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/2/ALDS1_2_Bより
問題
数列Aを読み込み、選択ソートのアルゴリズムで昇順に並び替え出力するプログラムを作成してください。
入力例
入力の最初の行に、数列の長さを表す整数 N が与えられます。2行目に、N 個の整数が空白区切りで与えられます。
6 5 6 4 2 1 3
出力例
出力は 2 行からなります。1行目に整列された数列を 1 行に出力してください。数列の連続する要素は1つの空白で区切って出力してください。2 行目に交換回数を出力してください。
1 2 3 4 5 6 4
https://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/2/ALDS1_2_Bより
選択ソートの実装
#include <iostream>
#include <cmath>
using namespace std;
void selectSort(int *A, int n){
int count = 0;
for(int i=0; i<n; ++i){
int minj = i;
for(int j=i; j<n; ++j){
if (A[j] < A[minj]){
minj = j;
}
}
if (i != minj){
swap(A[i], A[minj]);
count++;
}
}
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];
}
selectSort(A, n);
delete[] A;
return 0;
}