文章出處
文章列表
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、循環判斷這個空對象的值是否和數組中的值一樣,如果一樣就不理會,如果這個對象中沒有這個值就添加,并且把這個值添加到我們創建的數組中。
文章列表
全站熱搜