JS排序之冒泡排序详解


Posted in Javascript onApril 08, 2017

本文为大家分享了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,只需要比较数组的第一和第二项,比较完毕,返回。

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

Javascript 相关文章推荐
javascript中的缓动效果实现程序
Dec 29 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
May 02 Javascript
JavaScript实现select添加option
Jul 03 Javascript
jQuery实现带滑动条的菜单效果代码
Aug 26 Javascript
深入理解jquery中extend的实现
Dec 22 Javascript
bootstrapValidator表单验证插件学习
Dec 30 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
Apr 11 Javascript
探究react-native 源码的图片缓存问题
Aug 24 Javascript
JS获取一个表单字段中多条数据并转化为json格式
Oct 17 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
js实现删除li标签一行内容
Apr 16 Javascript
原生javascript如何实现共享onload事件
Jul 03 Javascript
JS排序之快速排序详解
Apr 08 #Javascript
JS排序之选择排序详解
Apr 08 #Javascript
Vue异步组件使用详解
Apr 08 #Javascript
利用jQuery解析获取JSON数据
Apr 08 #jQuery
AngularJS $http模块POST请求实现
Apr 08 #Javascript
node.js实现登录注册页面
Apr 08 #Javascript
详解vue2路由vue-router配置(懒加载)
Apr 08 #Javascript
You might like
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
JS分页效果示例
2013/10/11 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
python中二维阵列的变换实例
2014/10/09 Python
在Python中进行自动化单元测试的教程
2015/04/15 Python
Python线性回归实战分析
2018/02/01 Python
Python中的pack和unpack的使用
2018/03/12 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
python多线程使用方法实例详解
2019/12/30 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
教育专业毕业生推荐信
2014/07/10 职场文书
单位工作证明格式模板
2014/10/04 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
车间质检员岗位职责
2015/04/08 职场文书
工作年限证明范本
2015/06/15 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
导游词之无锡梅园
2019/11/28 职场文书