1. 選取目標值target,其他與之比較,<target放左邊,>target 放右邊
2. 第1輪
int[] a={2,1,5,6,3,7,9};
int start=0;
int end=a.length-1;
//--------------
int target=a[start];
//---------------
while (a[end]>target){
end--;
}
a[start]=a[end];
while (a[start]<target){
start++;
}
a[end]=a[start];
3. 第1輪 繼續,相等的話要把target放回去
while (start!=end){ while (a[end]>target){ end--; } a[start]=a[end]; while (a[start]<target){ start++; } a[end]=a[start]; } a[end]=target;
4. 第1輪繼續 沒有考慮index
int target=a[start]; while (start!=end){ while (a[end]>target && start<end){ end--; } a[start]=a[end]; while (a[start]<target && start<end){ start++; } a[end]=a[start]; } a[end]=target;
//第一輪結束
5.分段遞歸,方法提出來
public static void sort( int[] a,int start,int end){
//這裏是最後加的一個判斷
int tmpStart=start;
int tmpEnd=end;
if(tmpStart>=tmpEnd){
return;
}
int target=a[start];
while (start!=end){
//最後加的邊界
while (a[end]>=target && start<end){
end--;
}
a[start]=a[end];
while (a[start]<target && start<end){
start++;
}
a[end]=a[start];
}
a[end]=target;
//
for(int t:a){
System.out.print(t+"\t");
}
System.out.println();
//
sort(a,tmpStart,end);
sort(a,end+1,tmpEnd);
}