交换类排序之快速排序

#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)快排是递归进行的,需要栈的辅助,因此他需要的辅助空间比其他的几类排序算法多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值