时间复杂度O(nlgn)
#include <stdlib.h>
int PARTITION(int *A,int p,int r);
//快速排序
void QuickSort(int *A,int p,int r)
{
if(p<r)
{
int q=PARTITION(A,p,r);
QuickSort(A,p,q-1);
QuickSort(A,q+1,r);
}
}
//划分子数组
int PARTITION(int *A,int p,int r)
{
//A[r]作为主元,围绕它来划分子数组
int x=A[r];
int i=p-1;
int temp;
for(int j=p;j<=r-1;++j)
{
if(A[j]<=x)
{
i=i+1;
//小于A[r]的数往左移,交换A[i]和A[j]的值
temp=A[j];
A[j]=A[i];
A[i]=temp;
}
}
//交换A[r]和A[i+1]的值
temp=A[r];
A[r]=A[i+1];
A[i+1]=temp;
return i+1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int A[]={1,7,9,2,4,8};
QuickSort(A,0,sizeof(A)/sizeof(A[0])-1);
for(int i=0;i<sizeof(A)/sizeof(A[0]);++i)
{
printf("%d ",A[i]);
}
printf("\n");
system("pause");
return 0;
}