問題
https://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/2/ALDS1_2_C (新しいタブで開く)
問題文
バブルソートと選択ソートで、安定な出力をしているか判定してね。
「安定な出力」: 同じ数字を持つものが複数ある場合、ソート後も同じ順番になっていること。
制約
サンプル
I/O 1
5
H4 C9 S4 D2 C3
D2 C3 H4 S4 C9
Stable
D2 C3 S4 H4 C9
Not stable
I/O 2
2
S1 H1
S1 H1
Stable
S1 H1
Stable
考察
カードの柄がついてくれているので、安定ソートの判定は簡単。
あとは、バブルソートと選択ソートを実装するだけ。
コードは同じなので省略。
コード
typedef pair<string, int> P;
bool operator<(const P& lhs, const P& rhs) {
return lhs.first[1] < rhs.first[1];
}
bool operator!=(const P& lhs, const P& rhs) {
return lhs.first[1] != rhs.first[1];
}
vector<P> BubbleSort(vector<P> base) { ... }
vector<P> SelectionSort(vector<P> base) { ... }
void output(vector<P> bs) {
rep(i, bs.size()) cout << bs[i].first << (i == bs.size() - 1 ? "\n" : " ");
bool ok = true;
rep(i, bs.size() - 1) {
ok &= bs[i] != bs[i + 1] || bs[i + 1].second > bs[i].second;
}
puts(ok ? "Stable" : "Not stable");
}
int main() {
int n;
cin >> n;
vector<P> cards(n);
rep(i, n) {
cin >> cards[i].first;
cards[i].second = i;
}
output(BubbleSort(cards));
output(SelectionSort(cards));
return 0;
}