小球排序算法题的4种实现

在一个字符串数组中有红、黄、蓝三种颜色的球,且个数不相等、顺序不一致,请为该数组排序。使得排序后数组中球的顺序为:黄、红、蓝。
例如:红蓝蓝黄红黄蓝红红黄红,排序后为:黄黄黄红红红红红蓝蓝蓝。
//方法一:遍历取每个球的个数,用对象value保存,输出新遍历字符串
        var str = '红蓝蓝黄红黄蓝红红黄红'
        function sortBalls(str){
            var obj = {'黄':0,'红':0,'蓝':0},res='';
            for(let i=0,length = str.length;i
 //方法2:涉及排序就可联想到sort,但sort使用整数,如果为字符会转为unicode编码,可用颜色为key,代号为value,value为数字

        function sortBalls(str){
            var obj={'黄':0,'红':1,'蓝':2};
            return str.split('').sort((a,b)=>{return obj[a]-obj[b]}).join('');
        }
//方法3:创建对应种类个数数组,分别push.合并
        function sortBalls(str){
            // or Array.from({length:3}.fill([]),[[],[],[]];
            var arr = Array.from({length:3},item=>item=[]);
            //创建hash表,按排序顺序设置value
            var hashObj = {'黄':0,'红':1,'蓝':2};
            //遍历字符将元素放入对应下标子数组
            for(var i=0,length=str.length;ipre+=cur.join(''),'')
        }
//方法四:用str的matchAll,matchAll为ES新增加API,返回不可重启的迭代器RegExpStringIterator {},需用...orArray.from转为数组可观察
        function sortBall(str){
            return ['黄','红','蓝'].map((o)=>o.repeat([...'红蓝蓝黄红黄蓝红红黄红'.matchAll(o)].length)).join('')
        }
引申:可联想到常用快排或者归并排序方式实现

你可能感兴趣的:(小球排序算法题的4种实现)