基于分治策略:把一个问题划分成几个小问题,分别对小问题求解,把答案组合在一起,即为原问题的解

升序:

1>  找出位于待排序序列中间位置的值,赋给mid,把小于mid的值都移动到左半部分,大于mid的值都移动右半部分。

2> 分别递归左半部分和右半部分~·

 

	void qsort(int l,int r)
	{

		int i,j,mid,p;
		i=l;j=r;   
		mid=a[(l+r)/2];                       //将当前序列在中间位置的数定义为分隔数
		do
		{
			while (a[i]<mid)  {i++;}         //在左半部分寻找比中间数大的数
			while (a[j]>mid)  {j--;}           //在右半部分寻找比中间数小的数
			if (i<=j)
			{                                     //若找到一组与排序目标不一致的数对则交换它们
				p=a[i];a[i]=a[j];a[j]=p;
				i++;j--;                                    //继续找
			}
		}while(i<=j);                           //注意这里要有等号
		if (l<j) qsort(l,j);                     //若未到两个数的边界,则递归搜索左右区间
		if (i<r) qsort(i,r);
	}