前端 javascript 小算法 4个,使用了一点es6语法

1、插入排序

拿出一个数 t = arr[ i ] 和一个位置 pre = i-1,与 arr[ i-1 ] 比较,

如果前面的大于后边的,( arr[ pre+1 ] = arr[ pre ],pre- - );

如果后边大于前面 ,i++,pre = i-1

console.log("插入排序:")
    var arr=[4,2,5,3,1];
    console.log(arr);
    insertionSort(arr);
    function insertionSort(arr) {
        for (let i=1;i<arr.length;i++){
            let t=arr[i];
            let pre=i-1;
            while (pre > -1 && arr[pre] > t){
                arr[pre+1]=arr[pre];
                pre--;
            }
            arr[pre+1]=t;
        }
        console.log(arr);
    }

2、快速排序

就是二分法,用递归的方式

找到中间数,递归数组,最后拼接 concat() 起来

console.log("快速排序(二分法,递归)")
    var arr=[6,8,2,1,5,3,0];
    console.log(quickSort(arr));

    function quickSort(arr) {
        if (arr.length < 2){
            return arr;
        } else {
            var left=[],right=[];
            var m=parseInt( (arr.length-1)/2 );
            var middle=arr.splice(m,1)[0];
            for (let i=0;i<arr.length;i++){
                if (arr[i] < middle){
                    left.push(arr[i]);
                } else {
                    right.push(arr[i])
                }
            }
            return quickSort(left).concat(middle,quickSort(right));
        }
    }

3、数组去重

这个方法增加空间,减少时间复杂度

先定义一个hash{}对象,往hash里存储第一次出现的字符串;
每次遍历一个字符串都要看看hash里有没有对应的字符串?

有,不推进数组 r [ ];没有,推进 数组 r [ ]

console.log("去重数组:");
    var arr1=['1','1','22','33','33','22','3','2','1'];
    console.log(arr1);
    removeCopyWord(arr1);
    function removeCopyWord(arr) {
        var r=[];
        let hash={};
        for (let i=0;i<arr.length;i++){
            if (hash[arr[i]]===undefined)  {
                r.push(arr[i]);
                hash[arr[i]]=1;
            }
        }
       console.log(r);
    }

4、计算一个只有乘法和加法的表达式 1+23*2+3*3*3=?

先子符串分割 split() 掉 + 号,变成数组;
再对数组中的字符串分割 * 号成数字,并进行乘法运算,保留结果;
数组循环相加

    calculate('1+23*2+3*3*3=?');
    function calculate(str) {
        var multi=str.split("+");

        for (let i=0;i<multi.length;i++){
            if (multi[i].includes("*")) {
                if (multi[i].includes("=")) {
                    multi[i]=multi[i].split("=")[0];
                }
                var arr=multi[i].split("*");
                multi[i]=1;
                for (let j=0;j<arr.length;j++){
                    multi[i]*=arr[j];
                }
            }
        }

        console.log(multi);
        var result=0;
        for (let i=0;i<multi.length;i++){
            result+=parseInt(multi[i]);
        }
        console.log(result);
    }

猜你喜欢

转载自blog.csdn.net/clmmei_123/article/details/83961785
今日推荐