快速排序

#include <stdio.h>
#include <stdlib.h>

void swap(int *x, int *y) {
    int t = *x;
    *x = *y;
    *y = t;
}

int partition(int arr[], int p, int q) {
    swap(arr + (rand() % (q - p + 1)) + p, arr + q);
    int i = p;
    for (int j = p; j < q; j++) {
        if (arr[j] < arr[q]) {
            swap(arr + i++, arr + j);
        }
    }
    swap(arr + q, arr + i);
    return i;
}

void quickSort(int arr[], int p, int q) {
    if (p < q) {
        int m = partition(arr, p, q);
        quickSort(arr, p, m - 1);
        quickSort(arr, m + 1, q);
    }
}

int main() {
    int arr[] = {3, 2, -5, 4, 1}, size = sizeof(arr) / sizeof(int);
    quickSort(arr, 0, size - 1);
    for (int i = 0; i < size; ++i) {
        printf("%d\n", arr[i]);
    }
    return 0;
}

 

posted @ 2022-07-02 23:03  张时雨  阅读(24)  评论(0)    收藏  举报