JavaScript数组-冒泡排序

JavaScript数组-冒泡排序数组的冒泡排序算法也算一道经典面试题了,这里也给大家分享一下JavaScript中关于数组的冒泡排序的写法和思路:先给大家上代码:<script>//冒泡排序:将数组中的数字按照从大到小或从小到大的顺序排序vararr=[2,4,5,1,3];for(vari=0;i<arr.length-1;i++){//外层循环管趟数,即数组的全部项数都排好一共需要比较多少次一趟排好一个,注意趟

大家好,又见面了,我是你们的朋友全栈君。

数组的冒泡排序算法也算一道经典面试题了,这里也给大家分享一下JavaScript中关于数组的冒泡排序的写法和思路,这里将代码封装成了函数需要的朋友可以直接赋值使用,代码中具有详细的注释:

先给大家上代码:

<script>
        //sort函数需要接收两个值:第一个是需要排序的数组,第二个是排序的方式(从小到大/从大到小)
        function sort (arr,num) {
            for (var i = 0; i < arr.length -1; i++) {   // 外层循环管趟数,即数组的全部项数都排好一共需要比较多少次一趟排好一个,注意趟数应该是数组长度-1
                for (var j = 0; j < arr.length - i - 1; j++) {  // 里面的循环控制每一趟需要比较的次数,注意:这个次数应该是越来越少的,因为每循环一趟数组中都会有一个数被确定下来,那么就只需要再比较剩下没有被确定的即可
                    if (num == 0) { // num == 0 则排序方式为从小到大
                        // 内部的if判断相邻两个元素的值是否需要交换
                        if (arr[j] > arr[j + 1]) {  // 如果前一个 > 后一个则交换
                        var temp = arr[j];      // 交换两个变量的值,需要引入一个临时变量协助一下
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                        }
                    } else {        // num != 0 则排序方式为从大到小
                        // 内部的if判断相邻两个元素的值是否需要交换
                        if (arr[j] < arr[j + 1]) {  // 如果前一个 < 后一个则交换
                        var temp = arr[j];      // 交换两个变量的值,需要引入一个临时变量协助一下
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                        }
                    }
                }
            }
            return arr;
        }
        // 需要传两个参数,第一个是需要排序的数组,第二个数值=0则从小到大排序,!=0则从大到小排
        var one = [2, 4, 5, 1, 3];  // 需要排序的数组
        var tow = 0;    // 决定排序方式:0表示从小到大,非0表示从大到小
        var re = sort(one, tow);    //调用函数、传入参数
        console.log(re);    // 打印结果:[1, 2, 3, 4, 5]
</script>

冒泡排序:就是将数组中每相邻的两个项数进行比较按照一定的顺序(从大到小/从小到大)进行排序,一轮排好一个数,经过有限轮次的比较后即可按需求排好数组的项数。

排序主要思路:以上代码为例:代码中的arr = [2, 4, 5, 1, 3];如果是按照从小到大排序,先将2和4进行比较,大的在后,所以不需要换位置,然后4和5比较也一样不需要换位置,然后5和1比较发现是大的在前就不符合规则所以更换5和1的位置,在然后5和3比较也同样不符合规则所以更换位置,所以第一轮排序后数组变成了[2, 4, 1, 3, 5],从小到大的顺序此时一轮下来已有一个数字找到了自己正确的位置,然后看似还有四个数都不在它们正确的位置上,但是其实只需要再有3个数能正确找到它们自己的位置就可以了,因为总共5个数4个数都在正确的位置上了那剩下的一个肯定就是在属于它的位置上咯。所以外层循环的次数需要的是数组的长度减1次;而内层的循环次数其实是一直在减少的,比如经过了第一轮循环后数组变成[2, 4, 1, 3, 5],那么内层再比较只需要比较到3的位置即可,即2和4比、4和1比、4和3比,数组变成[2, 1, 3, 4, 5],所以其实将4放到正确的位置只比较了3次而已,而将5放到正确的位置使用了4次,所以内层比较的次数是在依次减少的而且是每次循环后需比较次数减1,所以外层循环越多,内层所需比较的次数就越少。

小结:

冒泡排序是一道经典算法题,其实要实现排序效果并不难,难在我们需要尽量减少优化程序中那些没有存在必要的执行路径,老师说“算法都是知难行易”,我们每一刻复杂的纠结都是在为了较少代码的执行冗余,这是程序员的责任和目标,不断的优化自己的代码,减少错误、无用的执行,才能让我们的项目更加优秀、出彩。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144993.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用Python对股票数据进行数据分析(一)-计算日线行情、5日均线、10日均线行情并显示

    使用Python对股票数据进行数据分析(一)-计算日线行情、5日均线、10日均线行情并显示使用Python对股票数据进行数据分析(一)-计算日线行情、5日均线、10日均线行情并显示各种炒股软件上可以显示各种技术指标,可以帮助投资者进行技术分析。这些股市中的这些指标都是怎么计算出来的呢?这里使用python的pandas库来进行计算。后期可能使用一些专门金融分析的库,比如talib库等进行分析。一、获取数据这里需要获取的数据是股票的日线行情,这里使用tushare进行获取,以…

    2025年7月23日
    1
  • java中的类[通俗易懂]

    java中的类[通俗易懂]4.1.类是什么?  1.类–类型–数据类型—复合数据类型—自定义复合数据类型  为什么有复合数据类型?  基本数据类型就8种,在开发中远远不够,所以我们就需要一个可以根据自己的需求随时能制作出一个自己需要的数据类型。  2.类–具有共同性质的一组事物的群体。人类。  在java中用来描述具有共同性质的一组事物的自定义的复合数据类型—类。  复合数据类型的本质—【根据自己的

    2022年7月7日
    21
  • TypeScript(3)基础类型[通俗易懂]

    TypeScript(3)基础类型[通俗易懂]基础类型TypeScript支持与JavaScript几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用。布尔值最基本的数据类型就是简单的true/false值,在JavaScri

    2022年7月29日
    2
  • AOP:使用命令模式实现AOP

    AOP:使用命令模式实现AOP

    2021年8月24日
    60
  • python的random()函数用法_Python随机函数random用法示例

    python的random()函数用法_Python随机函数random用法示例这篇文章主要为大家详细介绍了Python随机函数random用法示例,具有一定的参考价值,可以用来参考一下。对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!在python中用于生成随机数的模块是random,在使用前需要import,下面看下它的用法。random.randomrandom.random()用于生成一个0到1的随机符点数:0b,则生成的…

    2022年5月29日
    33
  • 我在武汉新东方上过的8个老师是谁_武汉新东方学校靠谱吗

    我在武汉新东方上过的8个老师是谁_武汉新东方学校靠谱吗上新东方的总结、感想。对新东方还是有一点留恋的。。。

    2022年9月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号