[排序]快排简单记忆版

使用temp

void quicksort(int a[],int l,int r)
{
    int i=l, j=r;
	if(i>=j)return;
	int temp=a[l];
	while(i<j)
	{
		//设第一位为Temp,j从右往左找小于temp的值给第一位 
		//i从左往右找大于temp的值替换掉刚刚右侧j的位置
		//j从右往左找小于temp的值替换掉刚刚左侧的i位置 
		//如此循环直到i>j,退出循环,temp赋值到i的位置 
		while(i<j&&a[j]>=temp)
		j--;
		a[i]=a[j];
		while(i<j&&a[i]<=temp)
		i++;
		a[j]=a[i];
	}
	a[i]=temp;
	//首元素放到了该放的位置,左右两侧递归(首元素位置为i位置) 
	quicksort(a,l,i-1);
	quicksort(a,i+1,r);
}

使用swap

快排的版本太多了,实现的方法也很多,但是也挺容易忘的。上面是网上的思路,用到temp,但是while里的替换还是复杂了点,于是就换用swap了。比较上面更容易记忆一点,就是右侧找小左侧找大,然后交换。最后第一个数换到相应位置,递归。

void quicksort(int a[],int l,int r)
{
    int i=l, j=r;
	if(i>=j)return;
	while(i<j)
	{
		while(i<j&&a[j]>=a[l])j--;
		while(i<j&&a[i]<=a[l])i++;
		swap(a[i],a[j]);
	}
	swap(a[l],a[i]);
	quicksort(a,l,i-1);
	quicksort(a,i+1,r);
}