• JS算法总结


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

  • 相关阅读:
    【多线程】工具类汇总
    【JVM】GC日志样例解读
    【Docker】
    XXS level5
    XXS level4
    XXS level3
    XXS level2
    SQLI DUMB SERIES-6
    SQLI DUMB SERIES-5
    XXS level1
  • 原文地址:https://www.cnblogs.com/pssp/p/5263910.html
Copyright © 2020-2023  润新知