#include <bits/stdc++.h>
using namespace std;
int main() {
// 3、一维数组的排序
int n;
cin >> n;
const int MAXSIZE = 100 + 1;
int arr[MAXSIZE];
memset(arr, 0, sizeof(arr));
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
// (1) 冒泡排序
for (int i = 1; i <= n; i++) {
for (int j = n; j > i; j--) {
if (arr[j] < arr[j - 1]) { // < 升序,> 降序
swap(arr[j], arr[j - 1]);
}
}
}
// (2) 冒泡排序(优化,用于接近完成的序列)
bool exchange;
for (int i = 1; i <= n; i++) {
exchange = false;
for (int j = n; j > i; j--) {
if (arr[j] < arr[j - 1]) { // < 升序,> 降序
swap(arr[j], arr[j - 1]);
cout << "swap : " << arr[j] << " <-> " << arr[j - 1] << endl;
exchange = true;
}
}
if (!exchange) break;
}
// (3) 选择排序
for (int i = 1; i < n; i++) {
for (int j = i; j <= n; j++) {
if (arr[i] > arr[j]) { // 确定擂主
swap(arr[i], arr[j]);
}
}
}
// (3) 插入排序
for (int i = 1; i <= n; i++) {
for (int j = i; j > 1; j--) {
if (arr[j] < arr[j - 1]) {
swap(arr[j], arr[j - 1]);
}
}
}
for (int i = 1; i <= n; i++) {
cout << arr[i] << " ";
}
cout << endl;
// (4) 计数排序
int n;
cin >> n;
const int MAXSIZE = 100 + 1;
int arr[MAXSIZE];
memset(arr, 0, sizeof(arr));
int num;
for (int i = 1; i <= n; i++) {
cin >> num;
arr[num]++;
}
// 去重输出
for (int i = 1; i <= MAXSIZE; i++) {
if (arr[i] > 0) {
cout << i << " ";
}
}
cout << endl;
// 重复元素输出
for (int i = 1; i <= MAXSIZE; i++) {
while (arr[i] > 0) {
cout << i << " ";
arr[i]--;
}
}
cout << endl;
// (5) sort 排序
int n;
cin >> n;
const int MAXSIZE = 100 + 1;
int arr[MAXSIZE];
memset(arr, 0, sizeof(arr));
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
sort(arr + 1, arr + 1 + n); // 升序排序
sort(arr + 1, arr + 1 + n, greater<int>()); // 降序排序
for (int i = 1; i <= n; i++) {
cout << arr[i] << " ";
}
cout << endl;
int cnt = unique(arr + 1, arr + 1 + n) - (arr + 1); // 去重 , 并返回去重后的数量
for (int i = 1; i <= cnt; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}