JS算法总结

时间:2022-03-01 03:06:16

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、循环判断这个空对象的值是否和数组中的值一样,如果一样就不理会,如果这个对象中没有这个值就添加,并且把这个值添加到我们创建的数组中。