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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • flask中jsonify和json区别[通俗易懂]

    flask中jsonify和json区别[通俗易懂]JSON数据结构要把json与字典区分开来dumps(字典转换成Json)loads(Json转换成字典)参考:Python的字典是一种数据结构,JSON是一种数据格式。json就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。而python的字典的字符串表现形式的规则看上去和json类似,但是字典本身是一个完整的数据结构,实现了一切自身该有的算法。Python的字典key可以是任意可hash对象,json只能是字符串。形式上有些相像,但JSO

    2022年5月23日
    52
  • dedecms织梦系统_dede模板站

    dedecms织梦系统_dede模板站(dede)织梦系统二次开发记录–soulsjie一、模板常用文件说明模板文件都在文件夹templets下,我们以默认模板(default)为例,对模板文件结构进行分析:首页模板文件目录\

    2022年8月2日
    9
  • python生成器详解_自动生成python代码

    python生成器详解_自动生成python代码生成器利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。

    2022年7月31日
    56
  • 35道SpringBoot面试题及答案,面试常被问到「建议收藏」

    35道SpringBoot面试题及答案,面试常被问到「建议收藏」作者:Arain|来源于:程序员面试SpringBoot是微服务中最好的Java框架.我们建议你能够成为一名SpringBoot的专家。本文精选了三十五个常见的SpringBoot知识点,祝你一臂之力!问题一SpringBoot、SpringMVC和Spring有什么区别?1、SpringSpring最重要的特征是依赖注入。所有SpringM…

    2022年6月7日
    35
  • 关于easyadmin的表单提交

    关于easyadmin的表单提交由于使用的是layui,所以用法如下html代码:<divclass=”layui-btnlayui-btn-smlayui-btn-successbtnYuyue”data-seenum=”{$vo.see_num}”data-fee=”{$vo.doctor_price}”data-time=”{$vo.start_time}-{$vo.end_time}”data-id=”{$vo.time_id}”>预约</div><scripttyp.

    2025年5月27日
    6
  • Tp5 打开PDF文件乱码的问题「建议收藏」

    Tp5 打开PDF文件乱码的问题

    2022年2月11日
    43

发表回复

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

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