使用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);
}