快速排序(C语言实现)

#include<stdio.h>

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

int Partition(int A[], int p, int r) {
    int X = A[p]; /* 选取第一个数为主元 主元不动 */
    int j = p; /* j从p开始 */
    for (int i = p + 1; i <= r; i++) /* 从p+1开始遍历 */
        if (A[i] <= X) {
            j++; /* 找到A[i]≤X时,j往后移动一位 */
            Swap(&A[i], &A[j]); /* 将比X小的数移到前面 */
        }
    /*
    * 此时j指向的位置和j的左边的数必定小于X,此时将存放X的A[p]与A[j]换位置
    * 此时A[j]的左边的数都小于等于A[j],右边的书都大于A[j],然后返回A[j]的位置
    */
    Swap(&A[j], &A[p]);

    return j;
}

void QuickSort(int A[], int p, int r) {
    int q;
    if (p < r) {
        q = Partition(A, p, r); /* 获取划分好的数组的中间元素的位置 */
        QuickSort(A, p, q - 1);/* 递归处理左右两边的数组 */
        QuickSort(A, q + 1, r);
    }
}

int main(void) {
    int a[10] = {5, 4, 3, 2, 100, 9, 8, 7, 6, 10};
    QuickSort(a, 0, 9);
    for (int i = 0; i < 10; i++)
        printf("%d\t", a[i]);
    return 0;
}
posted @ 2022-04-18 14:29  里列昂遗失的记事本  阅读(112)  评论(0)    收藏  举报