您的位置:首页 > 其它

快速排序经典实现

2012-04-18 15:15 225 查看
template<class T>
void sort(T a[],T st,T ed)
{
	if(st < ed)   //先设一个开关优化,会更快一些
	{ 
		T tmp = a[st], i = st, j = ed;
		while(i < j)
		{ 
			while (a[j] > tmp && i < j) --j;  //C++在判断时,会打开编译开关,把a[j]与tmp放在前比较,这样会更快一些~~
			if(i < j) 
			  a[i++] = a[j]; //ps:j-- ,i++(下行)比不了--j,++i快
			while (a[i] < tmp && i < j) ++i;//注意:这里用的不是">="或"<="而是">""<,事实证明,前者会增加交换的次数,做无用功~~~
			if(i < j) 
			  a[j--] = a[i];
		}  //while
		a[i]=tmp;
		sort(a,st,i-1);
		sort(a,i+1,ed);
	}  //if
	//这里不用return语句,会快一些
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: