编辑代码

#include <stdlib.h>
#include <iostream>

using std::cout;
using std::endl;

#define N 10
#define M 100
#define SWAP(x,y) {int tmp=x; x=y; y=tmp;}

void print(int *a)
{
    for(int i=0; i<N; ++i)
    {
        printf("%3d", a[i]);
    }
    printf("\n");
}
int partition(int *a, int left, int right)
{
    int i,j;
    for(i=left,j=left; i<N; ++i)
    {
        if(a[i] < a[right])
        {
            SWAP(a[j], a[i]);
            ++j;
        }
    }
    SWAP(a[j], a[right]);
    return j;
}
void quickSort(int *a, int left, int right)
{
    if(right > left)
    {
        int pivot = partition(a, left, right);
        quickSort(a, left, pivot-1);
        quickSort(a, pivot+1, right);
    }
}
int compare(const void* p1, const void* p2)
{
    int *pleft = (int*)p1;
    int *pright = (int*)p2;
    return *pleft - *pright;
}
int main()
{
    srand(time(NULL));
    int *a = (int*)malloc(sizeof(int)*N);
    
    for(int i=0; i<N; ++i)
    {
        a[i] = rand() % M;
    }
    print(a);
    
    //递归版本的快排
    quickSort(a, 0, N-1);
    
    //非递归版本的快排
    //qsort(a, N, sizeof(int), compare);
    
    print(a);
    
    free(a);
    return 0;
}