排序算法之快速排序

快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想:
1、从数列中取出一个数作为基准数(枢轴,pivot)。 
2、将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。
3、再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素

/******************
快速排序
****************************/
template<class T>
int partition(T arr[],int start,int end)
{
	T pivot = arr[start];
	while(start < end)
	{
		while(start<end && arr[start]<=arr[end])
			end--;
		if (start<end)
		{
			swap(arr[start++],arr[end]);
		}
		while(start<end && arr[start]<=arr[end])
			start++;
		if (start<end)
		{
			swap(arr[start],arr[end--]);
		}
	}
	//arr[start]=pivot;
	return start;
}


template<class T>
void quicksort(T arr[],int start,int end)
{
	if (start>=end)
	{
		return;
	} 
	else
	{
		int pivotpos = partition(arr,start,end);
		quicksort(arr,start,pivotpos-1);
		quicksort(arr,pivotpos+1,end);
	}
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值