JavaScript的冒泡、插入、自执行的知识点

       这是一篇Js的知识点的总结也可以叫做笔记。就是说有可能有的朋友不需要,有可能有的朋友需要,所以我就记录一下,这也是丰富本人的知识经验而写。

1、我们首先了解冒泡排序的思想。

      1》冒泡排序:是一种计算机科学领域的较简单的排序方法。

      2》思路:冒泡排序算法的运作如下:(从前到后) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2、冒泡排序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript的冒泡/插入/自执行函数</title>
</head>
<body>
    <!--这是引入JS;charset是语言编码格式-->
    <script type="text/javascript" charset="UTF-8">
        /*
         Bubble sort (冒泡排序)
         @arrayObject 是要传入的数组,就是要排序的对象
        */
        function bubbleSort(arrayObject) {
            /*
             1.创建三个对象arrayLength/i和j.
               arrayLength: 表示数组的长度.
               i:表示比较的轮数
               j:表示每轮要比较的次数
            */
            var  arrayLength= arrayObject.length,i,j;
            /*
              开始进行比较
             */
            for (i=0;i<arrayLength;i++){
                /*
                   1.进行比较相邻两个元素的大小
                   2.arrayLength-i: 表示是每轮比较的次数,例如:
                   var  arr = [4,3,6,1,5];
                   分析:
                   第一轮比较    1:4
                      第一次:4>3 ——>[3,4,6,1,5]
                      第二次:4>6 ——>[3,4,6,1,5]
                      第三次:6>1 ——>[3,4,1,6,5]
                      第四次:6>5 ——>[3,4,1,5,6]

                   第二轮比较   2:3
                      第一次:3>4 ——>[3,4,1,5,6]
                      第二次:4>1 ——>[3,1,4,5,6]
                      第三次:4>5 ——>[3,1,4,5,6]

                   第三轮比较   3:2
                      第一次:3>1——>[1,3,4,5,6]
                      第二次:3>4——>[1,3,4,5,6]

                   第四轮比较   4:1
                      第一次:1>3——>[1,3,4,5,6];
                   注释: 从以上轮次我们可以看出,比较的轮次和每轮次数的关系
                 */
                for (j=0;j<arrayLength-i;j++){
                    if (arrayObject[j]>arrayObject[j+1]){
                        /* 创建一个中间替换变量*/
                        var  temp = arrayObject[j];
                        arrayObject[j] = arrayObject[j+1];
                        arrayObject[j+1] = temp;
                    }
                }
            }
            /* 返回排序好的数组*/
            return arrayObject;
        }

        /*
            我们开始测试,上述我们写的方法
            1.创建一个要排序的数组
         */
        var  arrayNumber = [23,2,14,4,56];
        /* 我们调用冒泡排序的函数.并输出*/
        console.log(bubbleSort(arrayNumber));
        /* 
           1.上述输出
             [2, 4, 14, 23, 56]
         */

    </script>
</body>
</html>

3、插入排序

<script type="text/javascript" charset="UTF-8">
        /*
           1.插入排序的思想
                插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,
           直到全部插入完为止。
           2.插入排序的步骤过程
                直接插入排序的算法思路:
               (1) 设置监视哨r[0],将待插入纪录的值赋值给r[0];
               (2) 设置开始查找的位置j;
               (3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
               (4) 将r[0]插入r[j+1]的位置上。
         */
         /*
            首先了解几个知识点
            1>> push()
            1.push(): 方法可以向数组的末尾添加一个或者多个元素,并返回数组长度.
            2.push()的语法
              arrayObject.push(newelement1,newelement2,....,newelementX)
              参数	描述
              newelement1	必需。要添加到数组的第一个元素。
              newelement2	可选。要添加到数组的第二个元素。
              newelementX	可选。可添加多个元素。
              返回值
              把指定的值添加到数组后的新长度。
            3.说明
              push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。
              push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。
            4.提示和注释
              注释:该方法会改变数组的长度。
              提示:要想数组的开头添加一个或多个元素,请使用 unshift() 方法。

            2>>shift()
            1.shift():方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
            2.shift()的语法
              arrayObject.shift()
              返回值
              数组原来的第一个元素的值。
            3.说明
              如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值。
              请注意,该方法不创建新数组,而是直接修改原有的 arrayObject。
            4.提示和注释
              注释:该方法会改变数组的长度。
              提示:要删除并返回数组的最后一个元素,请使用 pop() 方法。

            3>> unshift():方法可向数组的开头添加一个或更多元素,并返回新的长度。
            1.unshift()的语法
              arrayObject.unshift(newelement1,newelement2,....,newelementX)
              参数	描述
              newelement1	必需。向数组添加的第一个元素。
              newelement2	可选。向数组添加的第二个元素。
              newelementX	可选。可添加若干个元素。
              返回值
            2.说明
              unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。
              该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素 1,以此类推。请注意,unshift()
              方法不创建新的创建,而是直接修改原有的数组。
            3.提示和注释
              注释:该方法会改变数组的长度。
              注释:unshift() 方法无法在 Internet Explorer 中正确地工作!
              提示:要把一个或多个元素添加到数组的尾部,请使用 push() 方法。

            4>>splice()
            1.splice():方法向/从数组中添加/删除项目,然后返回被删除的项目。
              注释:该方法会改变原始数组。
            2.语法
              arrayObject.splice(index,howmany,item1,.....,itemX)
              参数	描述
              index	必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
              howmany	必需。要删除的项目数量。如果设置为 0,则不会删除项目。
              item1, ..., itemX	可选。向数组添加的新项目。
              返回值
              类型	描述
              Array	包含被删除项目的新数组,如果有的话。
            3.说明
              splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
              如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
            4. 提示和注释
              注释:请注意,splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改。
          */
         function insertionSort(arrayObject) {
            /*
               创建一个存储数组
             */
             var  tempArray = [];
             /*
               我们要向tempArray 中添加第一个元素
              */
             tempArray.push(arrayObject.shift());
             /*
                注释:
                    arrayObject.shift() 后,我们传入的数组就发生变化,shift()改变了原数组.请看知识点.
                    现在 arrayObject 的第一个元素别截取调,从新创建一个新的数组.
              */
             /*
                创建两个参数
                1. i : 表示arrayObject的元素索引
                2. j : 表示tempArray的元素索引
              */
             var i,j;
             for (i=0;i<arrayObject.length;i++){
                 for (j=0;j<tempArray.length;j++){
                     /*
                        1. 从arrayObject中,拿出第一个元素和tempArray 中的所有元素相比
                      */
                     if (arrayObject[i]>tempArray[j]){
                         /* 进行多种情况处理*/
                         /* 判断最后,的情况,就是最后,也没有找到比自己大的数,那就将其追加到tempArray的最后*/
                         if (j==tempArray.length-1|| tempArray.length==1){
                             tempArray.push(arrayObject[i]);
                             break;
                         }
                     }else {
                         /* 多种情况的处理*/
                         /* 首先判断tempArray现在里面有几个元素*/
                         if(tempArray.length==1||j==0){
                             /* 将其添加到tempArray的第一个*/
                             tempArray.unshift(arrayObject[i]);
                             /* 终止本次循环*/
                             break;
                         }else {
                             /* 就是tempArray的元素个数不为1时候,我们就是要实现出插入处理*/
                             tempArray.splice(j,0,arrayObject[i]);
                             /* 警告的注释:splice(j,0,arrayObject[i])中的j,不能想成tempArray的元素索引.
                             这里是元素在tempArray中的位置*/
                             break;
                         }
                     }
                 }
             }
             /* 返回处理好的数组*/
             return tempArray;
         }
        /* 我们进行测试*/
        var  insertArrayNumber = [23,12,3,45,1,456];
        /* 调用函数*/
        console.log(insertionSort(insertArrayNumber));
        /*
           结果: 
           [1,3,12,23,45,456]
         */
    </script>

4、自执行函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自执行函数</title>
</head>
<body>
   <script type="text/javascript" charset="UTF-8">
       // 第一种:最前最后加括号
       (function () {
           alert('第一种自执行函数');
       }());

       // 第二种:function外面加括号
       (function () {
           alert('第二种自执行函数');
       })();

       // 第三种:function 前面加运算符,常见的是 ! 和 void,+
       // ! 号
       !function () {
           alert('第三种自执行函数');
       }();
       // 运算符
       +function () {
           alert('第五种自执行函数');
       }();
       // void
       void  function () {
           alert('第四种自执行函数');
       }();

       // 注释: 推荐第一种写法
   </script>
</body>
</html>

      


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值