索引0~zero都是0,two~n-1都是2,中间为1,即从0开始,当前索引i指向的数arr[i]
若arr[i]===1,即中间的1多了一个,将i++即可若arr[i]===2,则将当前的arr[i]放到two-1的位置,即two又扩展了1位若arr[i]===0,则将当前的arr[i]放到zero+1的位置,即zero又扩展了1位当前索引i===two时结束 function threeRoad(arr) { //0~zero :0 //two~n-1 :2 //i指向1的最后一个索引 var zero = -1, two = arr.length; for(var i = 0;i<two;){ if(arr[i] === 1){ i++; }else if(arr[i] === 2){ two--; swap(arr,i,two); }else if(arr[i] === 0){ zero++; swap(arr,zero,i); i++; } } return arr; } function swap(arr,i,j) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }