快速排序的思想:
1)、将第一个数作为数轴,用i查找比数组大的数,用j查找比数轴小的数,当i和j查到第一个数的时候就进行交换将数轴和j位置的元素进行交换。
2)、然后写一个递归函数调用排序函数就可以了。
其排序代码为:
public int quickSort(int a[],int p,int r){ int i=p; int j=r+1; int temp=a[p]; while(true){ while(a[++i]<temp&&i<r); while(a[--j]>temp); if(i>=j){ break; } swap(a,i,j); } swap(a,p,j);//交换引用的函数 return j; }
递归代码如下:
public void partition(int a[],int left,int right){ if(left<right){//证明至少有两个数才可以进行排序 int q=quickSort2(a, left, right); partition(a, left, q); partition(a, q+1, right); } }
优化快速排序:即更换数轴,因为数轴可以能会是最小的那个数或者最大那样的话会增加排序次数因此我们可以在数组中随机先后去一个数作为数轴进行运算。
int rand=(int)(Math.random()*(r-p)); swap(a,p,p+rand);//从排p开始计数所以要求加p