3路排序算法

原理

索引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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值