C 语言写的快排程序

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

void quickSort(int a[], int len)
{
    if(len <= 0) {
        return;
    }
    int c = a[0];
    int mid = 0;
    for(int i = 1; i < len; ++i){
        if(a[i] < c){
            a[mid++] = a[i];
        }
    }
    a[mid] = c;
    quickSort(a, mid);
    quickSort(a + mid, len - mid - 1);
    return;
}

int main(int argc, char *argv[])
{
    int a[] = {5,3,1,2,4};
    int len = sizeof(a)/sizeof(int);
    quickSort(a, len);
    for(int i = 0; i < len; ++i){
        printf("a[%d] = %d\n", i,a[i]);
    }
    return 0;
}

首先找到第一个元素 c ,然后找到中点的位置,mid ,同时保证 a[0]a[mid-1] 都小于 ca[mid+1]a[len-1] 都大于 c 。之后把 c 放在,a[mid] 的位置。

最后,递归排序比 c 小的部分,和比 c 大的部分。

这个排序重用了原始数据的内存地址,但是递归调用的时候,需要用到额外的栈空间,所以空间复杂度不是 O(1)