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 相关文章推荐
利用404错误页面实现UrlRewrite的实现代码
Aug 20 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
Jan 08 Javascript
JS 实现导航栏悬停效果(续)
Sep 24 Javascript
类似天猫商品详情随浏览器移动的示例代码
Feb 27 Javascript
Underscore.js常用方法总结
Feb 28 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
Oct 12 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
JS简单判断滚动条的滚动方向实现方法
Apr 28 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 Javascript
iSlider手机端图片滑动切换插件使用详解
Dec 24 Javascript
js基于canvas实现时钟组件
Feb 07 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
php GD绘制24小时柱状图
2008/06/28 PHP
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
js常见遍历操作小结
2019/06/06 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
Python assert语句的简单使用示例
2019/07/28 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
美国在线家具网站:GDFStudio
2021/03/13 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
应届生程序员求职信
2013/11/05 职场文书
博士生入学考试推荐信
2013/11/17 职场文书
求职信的最佳写作思路
2014/02/01 职场文书
营业用房租赁协议书
2014/11/26 职场文书
会议邀请函
2015/01/30 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书