#include <iostream>
using namespace std;
int main() {
int n, a[101], count[100000], maxx = -1e9;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
count[a[i]]++;
maxx = max(maxx, a[i]);
}
for (int i = 0; i <= maxx; i++) { // 可改变排序类型
while (a[i]--) {
cout << i << ' ';
}
}
return 0;
}
冒泡排序
基于:比较
特性:通用
性质:稳定
时间复杂度:
#include <iostream>
using namespace std;
int main() {
int n, a[101];
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n - 1; i++) {
bool end = true;
for (int j = 1; j <= n - i; j++) {
if (a[j] > a[j + 1]) { // 可改变排序类型
swap(a[j], a[j + 1]);
end = false;
}
}
if (end) {
break;
}
}
for (int i = 1; i <= n; i++) {
cout << a[i] << ' ';
}
return 0;
}
sort排序
基于:未知
性质:未知
特性:多用于结构体及多关键字排序
时间复杂度:
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int x, int y) {
return x > y; // 可改变排序类型
}
int main() {
int n, a[101];
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + 1 + n, cmp);
for (int i = 1; i <= n; i++) {
cout << a[i] << ' ';
}
return 0;
}
快速排序
基于:比较
特性:目前速度最快
性质:不稳定
时间复杂度:
#include <iostream>
using namespace std;
int a[101];
void quicksort(int left, int right) {
if (left >= right) {
return;
}
int mid = (left + right) / 2;
swap(a[mid], a[right]);
int i = left, j = right - 1;
while (i <= j) {
while (a[i] < a[right]) {
i++;
}
while (a[j] > arr[right]) {
j--;
}
if (i <= j) {
swap(a[i], a[j]);
i++;
j--;
}
swap(a[i], a[right]);
quicksort(left, i - 1);
quicksort(i + 1, right);
}
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
quicksort(1, 1 + n);
for (int i = 1; i <= n; i++) { // 可改变排序类型
cout << a[i] << ' ';
}
return 0;
}
选择排序
基于:比较
特性:交换次数最小
性质:不稳定
时间复杂度:
#include <iostream>
using namespace std;
void select_sort(int a[], int n) {
for (int i = 0; i < n - 1; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (a[j] < a[min]) { // 可改变排序类型
min = j;
}
}
if (min != i) {
swap(a[i], a[min]);
}
}
}
int main() {
int a[100], n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
select_sort(a, n);
for (int i = 0; i < n; i++) {
cout << a[i] << ' ';
}
return 0;
}