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)
上一篇 2022年5月18日 上午11:00
下一篇 2022年5月18日 上午11:00


相关推荐

  • 【SQL基础-4】SQL语句练习实例—在SQLzoo平台练习

    目录1平台操作简介2select基本语句2.1第1节selectbasic2.2第1节练习3SELECTfromWORLD练习3.1第2节SELECTfromWORLDTutorial3.2第2节练习4SELECT_from_Nobel练习4.1第3节SELECT_from_Nobel_Tutorial4.2第3节练习5归纳参考文章1平台操作简介本节练习内容主要是该平台左侧红色框内共9节内容,包括对应9节练习。每一节内容和练习完成

    2022年4月13日
    62
  • python表白代码-python告白代码,只属于程序员的浪漫

    python表白代码-python告白代码,只属于程序员的浪漫不知何时,不知何因,程序员这个行业成为大家茶余饭后取乐的无辜群体。只要说到程序员,脑海中就浮现出刻板印象,标配穿搭:格子衫,牛仔裤,黑框眼镜。当然秃顶也是必须的,更狠的吐槽还有邋里邋遢,不懂浪漫,不知人情世故!开始可能只是幽默玩笑,后面慢慢就越传越多,大家便信以为真!可是程序员真的是这样吗?随着现在编程这个行业的普遍高薪收入,程序员又成为大家关注的焦点,深入的了解后,发现程序员其实是很可爱的一个群…

    2022年5月5日
    59
  • HTML的dpr

    HTML的dpr只是为了自己以后查找方便 看不懂勿怪 DPI PPI 屏幕像素密度或屏幕每英寸的像素数量 dips 手机尺寸或独立像素物理像素 手机分辨率 dpr nbsp window devicePixelR js 可以拿到 css 定义 psd 转换 rem 单位 rem px 基准值基准值 手机宽高 dpr 10 乘以 dpr 是因为页面有可能缩放除以 10 是为了取整

    2025年9月22日
    6
  • 八皇后问题递归算法思想_迷宫在数据结构中的地位

    八皇后问题递归算法思想_迷宫在数据结构中的地位一、迷宫回溯问题1.问题一个7*8的数组模拟迷宫,障碍用1表示,通路使用0表示,给定起点(1,1)和终点(6,5),要求给出起点到终点的通路2.解题思路首先,我们需要给程序一个寻向的基本策略,

    2022年8月16日
    7
  • SuperSocket客户端

    SuperSocket客户端1 下载第一个是 SuperSocket 的客户端版本 0 10 0 第二个是 SuperSocket 提供的协议 过滤器版本 1 7 0 17 建立自己的过滤器 usingSuperSo ProtoBase usingSystem usingSystem Collections Generic usingSystem Linq usingSystem

    2026年3月26日
    2
  • 在pycharm中如何新建Python文件?_github下载的python源码项目怎么用

    在pycharm中如何新建Python文件?_github下载的python源码项目怎么用问题最近想把本地python项目提交到github,在网上找很多教程,都是如何在pycharm设置操作,但是这些人只讲了一部分,对于小白来说,需要从头到尾彻底了解一下。如果想把项目提交到github有多种方法,最常用的还是使用git,当然也可以下载githubDesktop这种GUI界面的工具,直接点点鼠标就可以提交项目。git下载地址:https://git-scm.com/downloads…

    2022年8月29日
    11

发表回复

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

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