原理
索引
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;
}