冒泡排序c++
#include <stdio.h> #include <bits/stdc++.h> using namespace std; int a[1005]; int main () { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); for (int i = 1; i <= n; i++) for (int j = 1; j < n - i + 1; j++) if (a[j] > a[j + 1]) swap(a[j], a[j + 1]); for (int i = 1; i <= n; i++) printf("%d ", a[i]); return 0; }
選擇排序ide
#include <stdio.h> #include <bits/stdc++.h> using namespace std; int a[1005]; int main () { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); for (int i = 1; i <= n; i++) { int x = i; for (int j = i; j <= n; j++) if (a[j] < a[x]) x = j; swap(a[x], a[i]); } for (int i = 1; i <= n; i++) printf("%d ", a[i]); return 0; }
插入排序ui
#include <stdio.h> #include <bits/stdc++.h> using namespace std; int cnt, a[1005]; void insert (int x) { int k = cnt + 1; for (int i = 1; i <= cnt; i++) if (a[i] > x) { k = i; break; } for (int i = cnt + 1; i > k; i--) a[i] = a[i - 1]; a[k] = x; cnt++; } int main () { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) { int x; scanf("%d", &x); insert(x); } for (int i = 1; i <= n; i++) printf("%d ", a[i]); return 0; }
歸併排序spa
#include <stdio.h> #include <bits/stdc++.h> using namespace std; int n, a[1005], t[1005]; void mergeSort (int l, int r) { if (l == r) return; int mid = (l + r) / 2; mergeSort(l, mid); mergeSort(mid + 1, r); int p = l, q = mid + 1, i = l; while (p <= mid && q <= r) { if (a[p] < a[q]) t[i++] = a[p++]; else t[i++] = a[q++]; } while (p <= mid) t[i++] = a[p++]; while (q <= r) t[i++] = a[q++]; for (int i = l; i <= r; i++) a[i] = t[i]; } int main () { scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); mergeSort(1, n); for (int i = 1; i <= n; i++) printf("%d ", a[i]); return 0; }
快速排序code
#include <stdio.h> #include <bits/stdc++.h> using namespace std; int n, a[1005], t[1005]; int getRand (int l, int r) { return rand() % (r - l + 1) + l; } void quickSort (int l, int r) { if (l >= r) return; int flag = a[getRand(l, r)]; int p = l, q = r; for (int i = l; i <= r; i++) { if (a[i] < flag) t[p++] = a[i]; if (a[i] > flag) t[q--] = a[i]; } for (int i = l; i < p; i++) a[i] = t[i]; for (int i = r; i > q; i--) a[i] = t[i]; for (int i = p; i <= q; i++) a[i] = flag; quickSort(l, p - 1); quickSort(q + 1, r); } int main () { scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); quickSort(1, n); for (int i = 1; i <= n; i++) printf("%d ", a[i]); return 0; }
拓撲排序+記錄層級+判斷是否爲 DAGblog
#include <stdio.h> #include <bits/stdc++.h> using namespace std; int n, m, cnt, num, elast[5005], in[5005], f[5005], ans[5005]; struct edge { int to, len, next; } e[10005]; queue<int> q; void add (int u, int v, int w) { e[++cnt].to = v; e[cnt].len = w; e[cnt].next = elast[u]; elast[u] = cnt; } bool topsort () { for (int i = 1; i <= n; i++) if (in[i] == 0) { q.push(i); f[i] = 1; ans[++num] = i; } while (!q.empty()) { int u = q.front(); q.pop(); for (int i = elast[u]; i != 0; i = e[i].next) { in[e[i].to]--; if (in[e[i].to] == 0) { q.push(e[i].to); f[e[i].to] = f[u] + 1; ans[++num] = e[i].to; } } } if (num != n) return false; return true; } int main () { scanf("%d %d", &n, &m); for (int i = 1; i <= m; i++) { int u, v; scanf("%d %d", &u, &v); add(u, v, 1); in[v]++; } bool flag = topsort(); if (!flag) { puts("no solution"); return 0; } for (int i = 1; i <= num; i++) printf("%d ", ans[i]); puts(""); sort(f + 1, f + 1 + num); for (int i = 1; i <= num; i++) printf("%d ", f[i]); return 0; }