冒泡排序
//冒泡排序
#include<iostream>
using namespace std;
const int N = 2e5 + 10;
int a[N];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int i, j, c;
for(i = 0; i < n; i++) {
c = 0;
for (j = 0; j < n - i - 1; j++) {
if (a[j] < a[j + 1]) {
swap(a[j + 1], a[j]);
c = 1;
}
}
if (c == 0) break;
}
for (i = 0; i < n; i++) {
cout << a[i];
}
return 0;
}
基本思想:每次都两两比较,比较完成后符合条件则交换,直到把最大(最小)元素排到最后,视为冒出。
选择排序
//选择排序
#include<iostream>
using namespace std;
const int N = 2e5 + 5;
int a[N];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int k;
for (int i = 0; i < n; i++) {
k = i;
for (int j = i + 1; j < n; j++) {
if (a[k] > a[j]) k = j;
}
if (k != i) swap(a[i], a[k]);
}
for (int i = 0; i < n; i++) {
cout << a[i];
}
return 0;
}
基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列的最前面,直到全部待排序的数据元素排完。
插入排序
//选择排序
#include<iostream>
using namespace std;
const int N = 2e5 + 5;
int a[N];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int i, j;
for (i = 1; i < n; i++) {
for (j = i; j > 0; j--) {
if (a[j] < a[j - 1]) {
swap(a[j], a[j - 1]);
}
else {
break;
}
}
}
for (int i = 0; i < n; i++) {
cout << a[i];
}
return 0;
}
基本思想:从待排序列的第二个元素开始,与前面已排序列的每个元素比较,若大(或小)则交换两元素直到待元素到达正确位置为止