SWAPで数字の並び替え
今回の問題はUVA299です。
Online Judge
Online Judge
数字の列を入力されて、それらを昇順に並べたときに何回SWAP(入れ替え)したかを数える問題です。
サンプルコード(GitHub)
cpe/一顆星/uva299/01.cpp at main · mintson0517/cpe
Contribute to mintson0517/cpe development by creating an account on GitHub.
コードの解説
今回の数字の列を配列のvectorで処理することにしました。
vector<int> numbers(L);
for (int i = 0; i < L; i++) {
cin >> numbers[i];
}
これによりnumbers配列の中に数字を一個ずつ入力されました。
int swaps = 0;
for (int i = 0; i < L - 1; i++) {
for (int j = 0; j < L - i - 1; j++) {
if (numbers[j] > numbers[j + 1]) {
swap(numbers[j], numbers[j + 1]);
swaps++;
}
}
}
小順に並べるために今回はバブルソートというアルゴリズムを使用します。
まず{5, 3, 8, 4, 2}配列を並べ直すとき、まずは配列の前後で大きければswapで入れ替え
→(if(numbers[j] > numbers[j + 1])) swap(numbers[j], numbers[j + 1]);
swapを使用するには#nclude <algorithm>が必要です!
それをforループで徐々に並び直していけば完了します。
最初の並び替えで8は一番後ろに行きます。
2回目は5が後ろから二番目に、みたいな感じです。