按数组大小限制100000来算。
#include <bits/stdc++.h>
using namespace std;
int n;
int a[100009];
int b[100009];
int h[100009];
void selection_sort () {
for (int i = 1; i <= n; i++) {
int mn = a[i];
int mi = i;
for (int j = i + 1; j <= n; j++)
if (mn > a[j]) {
mn = a[j];
mi = j;
}
swap (a[mi], a[i]);
}
}
void bubble_sort () {
for (int i = 1; i < n; i++)
for (int j = 1; j < n; j++)
if (a[j] > a[j + 1])
swap (a[j], a[j + 1]);
}
void optimized_bubble_sort () {
for (int i = 1; i < n; i++) {
bool p = false;
for (int j = 1; j <= n - i; j++)
if (a[j] > a[j + 1]) {
swap (a[j], a[j + 1]);
p = true;
}
if (!p) break;
}
}
void insert_sort1 () {
for (int i = 2; i <= n; i++) {
int cnt = 1;
while (a[i - cnt + 1] < a[i - cnt]) {
swap (a[i - cnt + 1], a[i - cnt]);
cnt++;
}
}
}
void insert_sort2 () {
for (int i = 2; i <= n; i++)
for (int j = i; j >= 2; j--) {
if (a[j] < a[j - 1]) swap (a[j], a[j - 1]);
else break;
}
}
void counting_sort () {
int mx = -2e9;
int mn = 2e9;
for (int i = 1; i <= n; i++) {
h[a[i]]++;
mx = max (mx, a[i]);
mn = min (mn, a[i]);
}
cout << "counting_sort: ";
for (int i = mn; i <= mx; i++)
if (h[i] != 0)
for (int j = 1; j <= h[i]; j++) cout << i << " ";
}
int main () {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> b[i];
a[i] = b[i];
}
selection_sort (); //选择排序
cout << "selection_sort: ";
for (int i = 1; i <= n; i++) cout << a[i] << " ";
cout << endl;
for (int i = 1; i <= n; i++) a[i] = b[i]; //赋值回待排序数组
bubble_sort (); //冒泡排序
cout << "bubble_sort: ";
for (int i = 1; i <= n; i++) cout << a[i] << " ";
cout << endl;
for (int i = 1; i <= n; i++) a[i] = b[i]; //赋值回待排序数组
optimized_bubble_sort (); //优化冒泡排序
cout << "optimized_bubble_sort: ";
for (int i = 1; i <= n; i++) cout << a[i] << " ";
cout << endl;
for (int i = 1; i <= n; i++) a[i] = b[i]; //赋值回待排序数组
insert_sort1 (); //插入排序方法1
cout << "insert_sort1: ";
for (int i = 1; i <= n; i++) cout << a[i] << " ";
cout << endl;
for (int i = 1; i <= n; i++) a[i] = b[i]; //赋值回待排序数组
insert_sort2 (); //插入排序方法2
cout << "insert_sort2: ";
for (int i = 1; i <= n; i++) cout << a[i] << " ";
cout << endl;
for (int i = 1; i <= n; i++) a[i] = b[i]; //赋值回待排序数组
counting_sort (); //计数排序
cout << endl;
return 0;
}