1. 程式人生 > >前端 javascript 小演算法 4個,使用了一點es6語法

前端 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);
    }