public class Sort { /* 建立总调用方法*/ public void All(int [] number,int Start,int length){ Rescurive(number,Start,length); } /*建立递归方法 */ private void Rescurive(int [] number,int Start,int ending){ if(ending-Start<1){ return; } /*把获得的基准数取到*/ int lable=select(number,Start,ending); /*把获得的基准数取到,然后传给执行去区间段的方法,然后重新获取缩小区间的基准数*/ lable=pistion(number,Start,ending,lable); /*把区间左移,*/ All(number, Start, lable-1); /*把区间右移,*/ All(number, lable+1, ending); } /*建立获取基准数的方法*/ private int select(int [] number,int Start,int ending){ return (Start+ending)/2; } /* 建立压缩区间的方法*/ private int pistion(int [] number,int Start,int ending,int lable){ int tmp=number[lable];//先把当前的基准数保持下来 number[lable]=number[ending]; //依据当前区间的起始值和结束值 while(Start!=ending){ while(Start<ending&&number[Start]<=tmp) Start++; if(Start<ending){ number[ending]=number[Start]; ending--; } while(Start<ending&&number[ending]>=tmp) ending--; if(Start<ending){ number[Start]=number[ending]; Start++; } } number[Start]=tmp; return Start; } public static void main (String [] args){ int [] number={12,21,32,2,1,3,42,2}; Sort s1=new Sort(); s1.All(number,0, number.length-1); for(int i=0;i<number.length;i++){ System.out.print(number[i]+" "); } } }