很多很多排序(未完待更 每天佛系更新)
阿新 • • 發佈:2018-11-29
1.氣泡排序
這個寫法是先把小的數字排出來然後再排出來大的數字
程式碼:
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int n; int num[maxn]; void BubbleSort(int L, int R) { for(int i = L; i <= R; i ++) { int flag = 0; for(int j = R; j > i; j --) { if(num[j] < num[j - 1View Code]) { swap(num[j], num[j - 1]); flag = 1; } } if(!flag) break; } } int main() { scanf("%d", &n); for(int i = 0; i < n; i ++) scanf("%d", &num[i]); BubbleSort(0, n - 1); for(int i = 0; i < n; i ++) { printf("%d", num[i]); printf("%s", i != n - 1 ? " " : "\n"); } return 0; }
2.插入排序
從前向後依次把每一個 $num[i]$ 插入到正確的位置
程式碼:
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int n; int num[maxn]; void InsertSort(int L, int R) { forView Code(int i = L; i <= R; i ++) { for(int j = i; j > L; j --) { if(num[j] < num[j - 1]) swap(num[j], num[j - 1]); else break; } } } int main() { scanf("%d", &n); for(int i = 0; i < n; i ++) scanf("%d", &num[i]); InsertSort(0, n - 1); for(int i = 0; i < n; i ++) { printf("%d", num[i]); printf("%s", i != n - 1 ? " " : "\n"); } return 0; }
3.選擇排序
每次在上一次排好剩下的元素李選最小的排出來
程式碼:
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int n; int num[maxn]; void SelectSort(int L, int R) { for(int i = L; i < R; i ++) { int minn = num[i]; int temp = i; for(int j = i + 1; j <= R; j ++) { if(num[j] < minn) { minn = num[j]; temp = j; } } swap(num[i], num[temp]); } } int main() { scanf("%d", &n); for(int i = 0; i < n; i ++) scanf("%d", &num[i]); SelectSort(0, n - 1); for(int i = 0; i < n; i ++) { printf("%d", num[i]); printf("%s", i != n - 1 ? " " : "\n"); } return 0; }View Code