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


相关推荐

  • C# DialogResult.OK == Form.ShowDialog()

    C# DialogResult.OK == Form.ShowDialog()简要的分析:是将窗体显示为模式窗体并判断窗体的返回值来确定下一步的操作。DialogResult是Form类的一个属性,ShowDialog()是Form类的一个方法也就是函数。一般对话框上会有:确定,取消两个按钮。点击确定,会设置DialogResult=DialogResult.OK;点击取消,会设置DialogResult=DialogResult.Cancel;

    2022年6月22日
    80
  • chmod a+x和chmod u+x区别

    chmod a+x和chmod u+x区别原文链接:https://www.cnblogs.com/tonyauto/p/8085551.htmlchmoda+xa.txt等价于chmod+xa.txt给所有用户给予a.txt文件可执行权限chmodu+xa.txta.txt文件的所有用户可执行权限chmodg+xa.txta.txt用户组可执行权限chmodo+xa.txta.txt其他用户可执行…

    2022年7月12日
    23
  • 关于代价函数的理解「建议收藏」

    关于代价函数的理解「建议收藏」假设拟合直线为,代价函数(costfunction)记为则代价函数:为什么代价函数是这个呢?首先思考:什么是代价?简单理解代价就是预测值和实际值之间的差距,那对于多个样本来说,就是差距之和。如果我们直接使用,这个公式看起来就是表示假设值和实际值只差,再将每一个样本的这个差值加起来不就是代价了吗,但是想一下,如果使用这个公式,那么就单个样本而言,代价有正有负,全部样本的代价加起来有可能正负

    2022年6月7日
    34
  • .ajax get 写法,原生Ajax写法(GET)

    .ajax get 写法,原生Ajax写法(GET)ajax的GET提交方式的原生代码:varxhr=null;if(window.XMLHttpRequest){xhr=newXMLHttpRequest();}elseif(window.ActiveXObject){xhr=newActiveXObject()}else{xhr=null;}if(xhr){xhr.open(‘GET’,’../data/data.jso…

    2022年9月30日
    4
  • 电商新宠—广告电商,转化产品的流量聚体地「建议收藏」

    电商新宠—广告电商,转化产品的流量聚体地「建议收藏」现在市面上通过看广告赚点零花钱的项目也是片地一把抓,在各大平台看广告,间接给平台赚钱,却不能给自己带来一些好处;而真正的并没有让消费者能长期的去坚持去做,一个月下来看广告收益也就十多二十元块钱,使大多数平台变得暗淡下去,最后无人问津。目前又听说在市面上流传了一个很火热的广告变现模式——广告电商,结合了“社交电商+广告分佣”,通过在平台购买商品,赠送同等或者一定量的积分,达到不同的门槛,可以根据不同的积分门槛看不同的广告(每天3分钟),实现广告变现,提现到微信、支付宝和对接的第三方支付服务平台。最终实现广告主

    2022年6月22日
    36
  • TortoiseGit安装配置_tortoisegit使用详解

    TortoiseGit安装配置_tortoisegit使用详解1TortoiseGit简介tortoiseGit是一个开放的git版本控制系统的源客户端,支持Winxp/vista/win7.该软件功能和git一样不同的是:git是命令行操作模式,tort

    2022年8月3日
    5

发表回复

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

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