记录一下几个常见的排序算法(纯手写)

由 TH779 发布

虽然使用 STL 函数来进行排序会更方便,但还是想记录一下。

冒泡排序

#include <bits/stdc++.h>

void bubbleSort(int *a, int b) {
    for (int i = b - 1; i > 0; i--)
        for (int j = 0; j < i; j++)
            if (a[j] > a[j + 1]) {
                int k = a[j];
                a[j] = a[j + 1];
                a[j + 1] = k;
            }
}

int main() {
    const int MAX = 105;
    int a[MAX];
    memset(a, 0, sizeof(a));

    int b;
    scanf("%d", &b);

    for (int i = 0; i < b; i++)
        scanf("%d", &a[i]);

    bubbleSort(a, b);

    for (int i = 0; i < b; i++)
        printf("%d\n", a[i]);

    return 0;
}

快速排序

#include <bits/stdc++.h>

void quickSort(int *a, int b, int c) {
    if (b < c) {
        int pos;
        int i = b;
        int j = c;
        int k = a[b];

        while (i < j) {
            while (i < j && a[j] > k) j--;

            if (i < j) {
                a[i] = a[j];
                i++;
            }

            while (i < j && a[i] < k) i++;

            if (i < j) {
                a[j] = a[i];
                j--;
            }
        }

        a[i] = k;

        quickSort(a, b, i - 1);
        quickSort(a, i + 1, c);
    }
}

int main() {
    const int MAX = 105;
    int a[MAX];
    memset(a, 0, sizeof(a));

    int b;
    scanf("%d", &b);

    for (int i = 0; i < b; i++)
        scanf("%d", &a[i]);

    quickSort(a, 0, b - 1);

    for (int i = 0; i < b; i++)
        printf("%d\n", a[i]);

    return 0;
}

选择排序

#include <bits/stdc++.h>

void selectionSort(int *a, int b) {
    for (int i = 0; i < b; i++) {
        int id = i;
        for (int j = i + 1; j < b; j++)
            if (a[j] < a[id]) id = j;

        if (id != i) {
            int k = a[id];
            a[id] = a[i];
            a[i] = k;
        }
    }
}

int main() {
    const int MAX = 105;
    int a[MAX];
    memset(a, 0, sizeof(a));

    int b;
    scanf("%d", &b);

    for (int i = 0; i < b; i++)
        scanf("%d", &a[i]);

    selectionSort(a, b);

    for (int i = 0; i < b; i++)
        printf("%d\n", a[i]);

    return 0;
}

纯手写,因本人水平有限,若有错误还望读者在评论区里指点一二。


暂无评论

发表评论