您的位置:首页 > 其它

交换类排序之快速排序

2016-03-25 21:35 204 查看
#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)快排是递归进行的,需要栈的辅助,因此他需要的辅助空间比其他的几类排序算法多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: