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