快速排序 详细总结
注意!!!!超级详细的快速排序总结~~~~~~~、
快速排序思路:用人的语言描述就是将数组先找一个标准(不是死的,我拿数组的最后一个数当标准)然后将数组分为两部分,一部分小于这个标准,一部分大于这个标准,那么这个新数组就是三部分:小于这个标准的部分+标准+大于这个标准的部分。然后对那两部分进行递归使用上述方法,那么到最后这个数组就是有序的啦~\(≧▽≦)/~
步骤:
1:让数组的最后一个数当做标准mark,定义p(进行上述方法目标数组的开始下标),r(进行上述方法目标数组的结束下标)p<=(小于标准的部分)<=i ( i+1)<=(大于标准的部分)<j 然后将最后一个标准和i+1那个位置的数换换位置,那么现在这个数组就是:小于这个标准的部分+标准+大于这个标准的部分 这个构造。
2:递归调用这个数组的小于标准的部分和大于标准的部分,这时的p r要变化!!!!!!注意!!所以可以使用参数来告诉方法p r是什么。
3:然后递归 递归 递归 。。。。。。到最后就有序了~~~~
貌似也不够详细啊吗,,,,,,那不懂得都可以留言戳我啊,我快马加鞭来拯救您~~~~~
代码如下:
1 //快速排序 2 public static int partition(int[] array,int p,int r){ 3 int i=p-1; 4 int mark=array[r]; 5 for(int j=p;j<r;j++){ 6 if(array[j]<mark){ 7 i++; 8 int temp=array[i]; 9 array[i]=array[j]; 10 array[j]=temp; 11 } 12 } 13 int temp=array[i+1]; 14 array[i+1]=array[r]; 15 array[r]=temp; 16 return i+1; 17 } 18 19 public static void quickSort(int [] array,int p,int r){ 20 int q; 21 if(p<r){ 22 q=partition(array,p,r); 23 quickSort(array,p,q-1); 24 quickSort(array,q+1,r); 25 } 26 } 27