思路:通過找一個標(biāo)志位距淫,以標(biāo)志位為大小分成兩個區(qū)間 左小右大
再以每個區(qū)間分別遞歸進(jìn)行左右區(qū)間大小區(qū)分俊性,來進(jìn)行排序
public class QuickSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int value[]={2,1,7,5,3,8,4};
getResult(value, 0, value.length-1);
for(int i=0;i<value.length;i++){
System.out.println(value[i]);
}
}
public static int position(int [] value,int start,int end){
int flag=value[start];//隨便選取一個分割點 選取第一個元素 留出轉(zhuǎn)換的空間 value[start]
//end和start 相當(dāng)于兩個指針 一頭一尾
while(start<end){
while(start<end&&value[end]>flag) end--; //后指針數(shù)大于標(biāo)志數(shù)則往前推
value[start]=value[end];//當(dāng)小于表指數(shù)時俯渤,則拿到標(biāo)志數(shù)的左邊,此時原本標(biāo)志數(shù)的位置是最合適的位置 也就是轉(zhuǎn)換空間 此時轉(zhuǎn)換空間變成了value[end]
while(start<end&&value[start]<flag) start++; //前指針數(shù)小于標(biāo)志數(shù)則往后移
value[end]=value[start];//大于時則和轉(zhuǎn)換空間交換 轉(zhuǎn)換空間又變成了value[start]
//如此交換后最盅,可確保在start-end的區(qū)間內(nèi)的數(shù)以標(biāo)志數(shù)左右大小分開
}
value[start]=flag;//將標(biāo)志數(shù)放入中間位置
return start;//返回中間位置的坐標(biāo)
}
public static void getResult(int value[],int start,int end){
int index;
if(start<end){
index=position(value,start,end);//得到切分的區(qū)間 標(biāo)志位
getResult(value,start,index-1);//左遞歸
getResult(value,index+1,end);//右遞歸
}
}
}