1. 程式人生 > >js 簡單演算法

js 簡單演算法

1. 巢狀陣列打平並且去重

    var arr = [3,2,4,5,6,1,5,4,[9,5,3,2,[10,4,6]]];
    var obj = {};//去重標識
    function test(data) {
        var newArr = [];
        for ( var i in data) {
            if (data[i] instanceof Array) {
                return  [].concat(newArr,test(data[i]));
            }else{
                
if(!obj[data[i]]) { obj[data[i]] = true; newArr.push(data[i]); } } } return newArr; } var data = test(arr); console.log(data)//[3, 2, 4, 5, 6, 1, 9, 10]

2.氣泡排序, 氣泡排序演算法就是依次比較大小,小的大的進行位置上的交換

    var
arr = [10,20,9,7,30,1,5]; for (var i in arr) { for (var j in arr) { if (arr[i] > arr[j]){ var num = arr[i]; arr[i] = arr[j]; arr[j] = num; } } } console.log(arr);//[30, 20, 10, 9, 7, 5, 1]

3.快速排序,演算法參考某個元素值,將小於它的值,放到左陣列中,大於它的值的元素就放到右陣列中,然後遞迴進行上一次左右陣列的操作,返回合併的陣列

就是已經排好順序的陣列了。

    var arr = [10,20,9,7,30,1,5];
    function fun(data) {
        var len = data.length;
        if (len <= 1) {
            return data;
        }
        var num = data[0];//參考元素
        var left = [];
        var right = [];
        for( var i = 1; i < len; i++) {
            if (data[i] < num ) {
                left.push(data[i]);
            }else{
                right.push(data[i]);
            }
        }
        return [].concat(fun(left), [num], fun(right));
    }
    console.log(fun(arr)); //[1, 5, 7, 9, 10, 20, 30]