• js算法—常用算法


    js的 算法

    参考:https://blog.csdn.net/weixin_41082623/article/details/81988836

    一、排序算法 :     十大经典排序算法(动图演示)

      1、冒泡排序:

        1)比较相邻的两个元素,如果前一个比后一个大,则交换位置。

        2)第一轮的时候最后一个元素是最大的一个。

        3)按照步骤一的方法进行相邻两个元素的比较,由于最后一个元素已经是最大的了,因此最后一个元素不用比较。

        var arr = [10,20,5,8,21,100,99];
        for(var i = 0;i<arr.length;i++) {
            for(var k = 0; k < arr.length-i-1; k++) {
                if(arr[k]>arr[k+1]){
                    var temp = arr[k+1];
                    arr[k+1] = arr[k];
                    arr[k] = temp;
                }
            }
        }
        console.log(arr);  //  [5, 8, 10, 20, 21, 99, 100]

      2、sort排序:【这个用的比较多】

    var a=[10,20,5,8,21,100,99];
        a.sort(function(n1,n2){
        return n1-n2;
    });
       console.log(a) // [5, 8, 10, 20, 21, 99, 100]

    二、数组去重

    function unique(arr) {
                let brr=[];
                for (let i=0; i<arr.length; i++) {
                    if (brr.indexOf(arr[i]) < 0) {
                        brr.push(arr[i]);
                    }
                }
                return brr;
            }

     三、数组中最大差值

    四、数组中的最大值

      1、先排序,在获取

    五、数组交集并集差集

      1、现有两数组a = [1, 2, 3],b = [2, 4, 5],求a,b数组的并集,交集和差集。

    算法实践

    1、对一个对象数组按照对象某个属性进行排序  : https://www.cnblogs.com/webcabana/p/7460038.html

      在做公交的项目中就碰到过这种算法问题,从后台请求回来的一大堆的数据,都需要前端处理。所以就把这个问题写进博客里。

       只要是 js的sort()方法 的使用:https://www.cnblogs.com/fnz0/p/7680297.html

         sort()方法 的执行过程

       (个人分析) sort()函数的 比较函数,在执行时,js程序会依次把 数组的项,两个两个的传递给比较函数的形参。

      根据比较函数的返回值 是否大于0,再决定传递进来的这两项是否要对换位置。

            arr.sort(function(a,b){
                return a-b;   // return的值为 正或0,则数组中a、b对应的实参 不调换位置。
            });               // return的值为 负,则数组中a、b对应的实参 调换位置。

       通过测试,发现数组arr中的取某两个项的组合,并没有全部都进入了比较函数中(这个内部是怎么实现的,我们可以不用深究),

      但是最后的结果就是按照顺序return中要求的比较的规则进行排序了。

          var arr = [4,3,8,2,6];
          console.log("起始",arr);
          arr.sort(function(a,b){
              console.log(a,b);  // 这里输出的并没有把arr所有的组合全部都执行了一遍比较函数,内部肯定通过某种方式实现了最少次的比较,得到数值所有项按照顺序排列。
              return a-b;     // 这里内部具体是通过什么机制实现的最少次比较的,可以不用太过深究
          });
          //  4 3
          //  4 8
          //  8 2
          //  4 2
          //  3 2
          //  8 6
          //  4 6

    2、冒泡排序(将数值按照大小顺序进行排列): https://www.cnblogs.com/dushao/p/6004883.html

    3、数组中的最小值和最大值:https://www.cnblogs.com/zhouyangla/p/8482010.html  或  https://www.cnblogs.com/ywx354980-bk/p/8718541.html

      a、排序法:     

      b、js中Math 对象的 min 和 max 方法 :

         min 和 max 方法的参数都是数值,而不是数组。所以要利用min和max方法必须要把数组的值一个一个取出来作为参数。

         apply方法 的第二个参数是数组,传递到 劫持(继承)对象方法的参数, 是数组中的值一个一个传递过去(而不是一个对象)。即 apply数组参数 --> 继承对象方法的arguments。而对象的参数是 arguments[ i ]

       注:不过es6中有一个  展开运算符(...),可以将数值或对象两边的 [] 或 {} 去掉的功能。所以min 和 max可以通过 展开运算符 直接实现。

      

    4、数组中所有的值 与 一个已知值的 的差值的最小值:

        

    个人体会:算法基本 和 数组有关,所以数组有关的API要熟练。

    总结:一般在js中涉及到的算法就  排序算法、二分查找、动态规划(最好避免使用递归的算法,效率太低了,容易引起浏览器假死状态)


    别人的关于js算法的博客:

    1、JS常见的算法 : https://www.cnblogs.com/lvmylife/p/7208541.html

    查找有: 线性查找、二分查找

  • 相关阅读:
    PAT 甲级 1101 Quick Sort
    PAT 甲级 1038 Recover the Smallest Number
    #Leetcode# 112. Path Sum
    #Leetcode# 17. Letter Combinations of a Phone Number
    #Leetcode# 235. Lowest Common Ancestor of a Binary Search Tree
    C++结构体重构
    【NOIP2016提高A组模拟9.7】鼎纹
    快速幂总结
    【NOIP2013提高组】货车运输
    【NOIP2015提高组】运输计划
  • 原文地址:https://www.cnblogs.com/wfblog/p/14597504.html
Copyright © 2020-2023  润新知