public class Solution {
public void sortColors(int[] A) {
int left0, right0;
int left1, right1;
int left2, right2;
int n = A[0];
if(n == 0){
left0 = right0 = 0;
left1 = right1 = 1;
left2 = right2 = 1;
}
else if(n == 1){
left0 = right0 = 0;
left1 = right1 = 0;
left2 = right2 = 1;
}
else if(n == 2){
left0 = right0 = 0;
left1 = right1 = 0;
left2 = right2 = 0;
}
int tmp;
for(int i = 1; i < A.length; i++){
switch(A[i]){
case 0:{
tmp = A[i];
for(int j = i-1; j >= left1; j--){
A[j+1] = A[j];
}
A[left1] = tmp;
right0 = left1;
left1++;
right1++;
left2++;
right2++;
break;
}
case 1:{
tmp = A[i];
for(int j = i-1; j >= left2; j--){
A[j+1] = A[j];
}
A[left2] = tmp;
right1 = left2;
left2++;
right2++;
break;
}
case 2:{
right2++;
break;
}
}
}
}
}
网上别人更简单的代码:赞!!!
public void sortColors(int[] A) {
int i=-1, j=-1, k=-1;
for(int p = 0; p < A.length; p++)
{
if(A[p] == 0)
{
A[++k]=2;
A[++j]=1;
A[++i]=0;
}
else if (A[p] == 1)
{
A[++k]=2;
A[++j]=1;
}
else if (A[p] == 2)
{
A[++k]=2;
}
}
}
and:
public void sortColors(int[] A) {
int i=-1, j=-1;
for(int p = 0; p < A.length; p++) {
int v = A[p];
A[p] = 2;
if (v == 0) {
A[++j] = 1;
A[++i] = 0;
}
else if (v == 1) {
A[++j] = 1;
}
}
}