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

  • 相关阅读:
    D. Babaei and Birthday Cake--- Codeforces Round #343 (Div. 2)
    Vijos P1389婚礼上的小杉
    AIM Tech Round (Div. 2) C. Graph and String
    HDU 5627Clarke and MST
    bzoj 3332 旧试题
    codeforces 842C Ilya And The Tree
    codesforces 671D Roads in Yusland
    Travelling
    codeforces 606C Sorting Railway Cars
    codeforces 651C Watchmen
  • 原文地址:https://www.cnblogs.com/pssp/p/5263910.html
Copyright © 2011-2022 走看看