模板

冒泡排序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;
}
Sham_Devour

選擇排序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;
}
Sham_Devour

插入排序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;
}
Sham_Devour

歸併排序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;
}
Sham_Devour

快速排序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;
}
Sham_Devour

拓撲排序+記錄層級+判斷是否爲 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;
}
Sham_Devour
相關文章
相關標籤/搜索