快速排序经典实现

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语句,会快一些
}  

你可能感兴趣的:(优化)