3路排序算法

来源:互联网 发布:剑灵捏脸数据图下载 编辑:程序博客网 时间:2024/05/17 08:26

原理

索引0~zero都是0two~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;}