JS排序之冒泡排序详解

 更新时间:2017年04月08日 11:58:48   作者:Blue-Beginner  
这篇文章主要为大家详细介绍了JS冒泡排序的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家分享了JS冒泡排序的具体代码,供大家参考,具体内容如下

说明

时间复杂度指的是一个算法执行所耗费的时间
空间复杂度指运行完一个程序所需内存的大小
稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面
不稳定指,如果a=b,a在b的前面,排序后可能会交换位置

--JS冒泡排序--

原理

依次比较相邻的两个值,如果后面的比前面的小,则将小的元素排到前面。依照这个规则进行多次并且递减的迭代,直到顺序正确。

时间复杂度,空间复杂度,稳定性

  • 平均时间复杂度O(n*n)
  • 最好情况O(n)
  • 最差情况O(n*n)
  • 空间复杂度O(1)
  • 稳定性:稳定

冒泡排序的写法

var examplearr=[8,94,15,88,55,76,21,39];
function sortarr(arr){
  for(i=0;i<arr.length-1;i++){
    for(j=0;j<arr.length-1-i;j++){
      if(arr[j]>arr[j+1]){
        var temp=arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=temp;
      }
    }
  }
  return arr;
}
sortarr(examplearr);
console.log(examplearr);

解析

两个循环

当i=0的时候,里面的循环完整执行,从j=0执行到j=6,这也就是第一遍排序,结果是将最大的数排到了最后,这一遍循环结束后的结果应该是[8,15,88,55,76,21,39,94]

当i=1的时候,里面的循环再次完整执行,由于最大的数已经在最后了,没有必要去比较数组的最后两项,这也是j<arr.length-1-i的巧妙之处,结果是[8,15,55,76,21,39,88,94]

说到这里,规律就清楚了,每次将剩下数组里面最大的一个数排到最后面,当第一个循环执行到最后的时候,也就是i=6,此时,j=0,只需要比较数组的第一和第二项,比较完毕,返回。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JS+Canvas实现动态时钟效果

    JS+Canvas实现动态时钟效果

    这篇文章主要为大家详细介绍了JS+Canvas实现动态时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Javascript中数组去重与拍平的方法示例

    Javascript中数组去重与拍平的方法示例

    这篇文章主要介绍了Javascript中数组去重与拍平的相关资料,因为这是实际业务开发中经常遇到的,文中开始先进行了数组的判断介绍,因为在处理数组之前判断数据是不是数组很重要,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • js面向对象编程总结

    js面向对象编程总结

    本文主要介绍了js面向对象编程的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • javascript结合canvas实现图片旋转效果

    javascript结合canvas实现图片旋转效果

    图片的旋转可以说是一种效果,但是逐渐旋转已经不单单是属于视觉效果那个范畴,其更具有使用性,功能性。照片有时候是需要横过来的拍的,当我们预览或共享到web上时需要进行旋转。这个操作在以往可能更多的是交给软件去完成,然后再将旋转到正常角度的图片发布到web上。
    2015-05-05
  • layui关闭层级、简单监听的实例

    layui关闭层级、简单监听的实例

    今天小编就为大家分享一篇layui关闭层级、简单监听的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 如何理解JS函数防抖和函数节流

    如何理解JS函数防抖和函数节流

    函数防抖和函数节流都是对函数进行特殊的设置,减少该函数在某一时间段内频繁触发带来的副作用。二者只是采用的设置方式和原理不一样,其最终的目的是一样的。
    2021-05-05
  • JS如何监听div的resize事件详解

    JS如何监听div的resize事件详解

    这篇文章主要给大家介绍了关于JS如何监听div的resize事件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 琥珀无限级联动菜单-JavaScript版

    琥珀无限级联动菜单-JavaScript版

    琥珀无限级联动菜单-JavaScript版...
    2006-11-11
  • JavaScript实现拖拽功能

    JavaScript实现拖拽功能

    这篇文章主要为大家详细介绍了JavaScript实现拖拽功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 浅谈es6语法 (Proxy和Reflect的对比)

    浅谈es6语法 (Proxy和Reflect的对比)

    下面小编就为大家带来一篇浅谈es6语法 (Proxy和Reflect的对比)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论