这道题虽然外表是颜色排列但是内容是对数字的排序,很简单的merge即可。
public class Solution {
public void mergsort(int[] A,int i,int j){
if(i<j){
mergsort(A, i,(i+j)/2);
mergsort(A, (i+j)/2+1, j);
merge(A,i,j);
}
}
public void merge(int[] A,int i,int j){
int[] tmp = new int[j-i+1];
int x=i;
int y=(i+j)/2+1;
int z=0;
while(x<=(i+j)/2&&y<=j){
if(A[x]<A[y]){
tmp[z]=A[x];
x++;
}
else{
tmp[z]=A[y];
y++;
}
z++;
}
while(x<=(i+j)/2){
tmp[z]=A[x];
x++;
z++;
}
while(y<=j){
tmp[z]=A[y];
y++;
z++;
}
z=0;
for(int e=i;e<j+1;e++,z++){
A[e]=tmp[z];
}
}
public void sortColors(int[] A) {
if(A.length<=1)
;
else{
mergsort(A,0,A.length-1);
}
}
}
Update 2015/08/28: 上面的解法不好,更好的解法在评论里