标签:
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
以上的就是思想,在看了这个视频:http://www.iqiyi.com/v_19rrhzyeqs.html,我学着写了一段脚本,脚本如下
public class QuickSort { public static void main(String[] args){ int[] a={12,22,11,3,13,45,6,33,22,5,6,2,1,12}; show(a); sort(a, 0, a.length - 1); show(a); } public static void show(int a[]){ for(int i=0;i<a.length;i++) System.out.print(a[i] + " "); System.out.println(); } public static void sort(int[] a, int begin, int end){ if(end-begin<=1) return; int key=a[begin];//基准 int p1=begin; int p2=end; boolean bool=true;//默认为true的时候从右向左比较 L1: while (p1<p2){ if(bool){ for(int i=p2;i>p1;i--){ if(a[i]<=key){ a[p1]=a[i]; p1++; p2=i; bool=false; continue L1; } } p2=p1; }else { for(int i=p1;i<p2;i++){ if(a[i]>=key){ a[p2]=a[i]; p2--; p1=i; bool=true; continue L1; } } p1=p2; } } a[p1]=key; sort(a, begin, p1 - 1); sort(a, p1 + 1, end); } }
但是执行的结果为
12 22 11 3 13 45 6 33 22 5 6 2 1 12 1 2 3 5 6 6 11 12 12 22 13 22 45 33
奇怪的是,思路是没有错误的,但是为什么结果却是不对,还在研究中
标签:
原文地址:http://www.cnblogs.com/xxyBlogs/p/4948340.html