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操纵Cookie实现购物车程序
Nov 23 Javascript
javascript 学习之旅 (1)
Feb 05 Javascript
js去字符串前后空格5种实现方法及比较
Apr 03 Javascript
javaScript(JS)替换节点实现思路介绍
Apr 17 Javascript
JavaScript事件处理器中的event参数使用介绍
May 24 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
Jun 08 Javascript
Google 地图控件集详解及实例代码
Aug 06 Javascript
移动端脚本框架Hammer.js
Dec 15 Javascript
js date 格式化
Feb 15 Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 Javascript
taro开发微信小程序的实践
May 21 Javascript
JS代码检查工具ESLint介绍与使用方法
Feb 04 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
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
关于Keras Dense层整理
2020/05/21 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
"序列点" 是什么
2016/07/29 面试题
大学生护理专业自荐信
2013/10/03 职场文书
市场营销专业毕业生自荐信
2013/11/02 职场文书
家长给幼儿园的表扬信
2014/01/09 职场文书
新文化运动的基本口号
2014/06/21 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
如何写好活动总结
2019/06/21 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
总结一些Java常用的加密算法
2021/06/11 Java/Android
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS