文章出處

1、選擇排序:

var arr = [3,6,7,2,6,4,1,6,8,24,12,53];
function sort(arr){
    // 當數組的長度小于1的時候結束遞歸
    if(arr.length==1){
        return arr;
    }
    var min = arr[0],index = 0;
    for(var i=0;i<arr.length;i++){
        // 計算最小值,如果數組當前值比之前的值還小那么min等于最小值。
        if(arr[i]<min){
            min = arr[i];
            // 保存下最小值的索引,好用來后面刪除它
            index = i;
        }
    }
    // 刪除最小值
    var prev = arr.splice(index,1);
    // 通過遞歸,將這一輪中的最小值合并下一輪的最小值,直到arr的length為1停止遞歸。
    return prev.concat(sort(arr));
}
console.log(sort(arr));

原理分析:

  1、獲取當前數組中最小的那個值。

  2、獲取最小值的分析:隨便從數組中拿出一個值,把這個拿出來的值當做最小值,然后和后面的值比較,如果后面的值比這個當前的值還小,那么我們把拿出來的那個值賦值成那個更小的值。

  3、保存那個最小值的索引,因為我們需要刪除這個最小值,好獲取下一輪第二小的值,不然下一輪的最小值還是這個值。

  4、刪除數組中的最小值。

  5、因為一次只能獲取一個最小值,所以我們需要通過遞歸,不斷地重復調用它。

 

在前面的一篇文章中我還寫給另外個兩種排序算法,如果你對算法感興趣的話可以看看js數組冒泡排序,快速排序的原理以及實現這篇文章。

 

2、數組去重:

var arr = [3,6,7,2,5,5,6,4,1,6,8,24,12,53];
function sort(arr){
    var obj = {};
    var t = [];
    for(var i=0;i<arr.length;i++){
        // 判斷這個對象的屬性是否和數組的值相同,相同則不添加,否則給這個對象添加這個值
        if(!(obj[arr[i]]===arr[i])){
            obj[arr[i]] = arr[i];
            // 把這個過濾完以后的值添加到我們的新數組中。
            t.push(arr[i]);
        }
    }
    return t;
}
console.log(sort(arr));

原理分析:

  1、創建一個空對象和一個空數組,空對象用來過濾數組中相同的值,而空數組用來保存過濾以后的值。

  2、循環判斷這個空對象的值是否和數組中的值一樣,如果一樣就不理會,如果這個對象中沒有這個值就添加,并且把這個值添加到我們創建的數組中。

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()