#include<stdio.h>
void QuickSort(int R[],int l,int r) //快排
{
int i=l,j=r;
int temp;
if(l<r)
{
temp=R[l]; //以temp为关键字,也就是最左边的那个数
while(i!=j) //直到i=j为止结束
{
//数组中小于temp的元素放在左边,大于temp的元素放右边
while(j>i&&temp<R[j]) --j;//从右往左扫描找到一个小于temp的元素
if(i<j)
{
R[i]=R[j];
++i; //i指针右移一位
}
while(j>i&&temp>R[i]) ++i; //从左往右扫描找到一个大于temp的元素
if(i<j)
{
R[j]=R[i];
--j; //j指针左移一位
}
}
R[i]=temp; //将temp放在最终位置
QuickSort(R,l,i-1); //递归地将temp左边的元素进行排序
QuickSort(R,i+1,r); //递归地将temp右边的元素进行排序
}
}
int main()
{
int R[5]={2,8,1,6,3};
int i;
QuickSort(R,0,4);
for(i=0;i<5;i++)
printf("%d ",R[i]);
printf("\n");
return 0;
}
(1)时间复杂度分析:快排最好情况下的时间复杂度是O(nlogn),待排序列越接近无序,本算法效率越高。最坏情况下的时间复杂度为O(n^2),待排序列越接近有序,算法的效率越低。平均时间复杂度为O(nlogn)。就平均时间而言,快速排序是所有排序算法中最好的。
(2)空间复杂度分析:O(logn)快排是递归进行的,需要栈的辅助,因此他需要的辅助空间比其他的几类排序算法多。