天天看點

【分治算法】快速排序(c++)

這是主要代碼(函數名不怎麼好聽)

用法(假如有n個數):qw(1,n)

void qw(int l,int r)
{
	int i=l,j=r;
	int mid=a[rand()%(r-l)+l];
	while(i<=j)
	{
		while(a[i]<mid/*a[i]>mid*/)i++;
		while(a[j]>mid/*a[j]<mid*/)j--;
		if(i<=j)
		{
			a[0]=a[i];
			a[i]=a[j];
			a[j]=a[0];
			i++;
			j--;
		}
	}
	if(l<j)qw(l,j);
	if(i<r)qw(i,r);
}
           
這是從小到大排,反過來就是注釋的内容,其他不變(這種排序不穩定)

繼續閱讀