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 相关文章推荐
Jquery对象和Dom对象的区别分析
Nov 20 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
Nov 05 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
javascript代码调试之console.log 用法图文详解
Sep 30 Javascript
bootstrap下拉列表与输入框组结合的样式调整
Oct 08 Javascript
js实现五星评价功能
Mar 08 Javascript
javascript  数组排序与对象排序的实例
Jul 17 Javascript
js断点调试心得分享(必看篇)
Dec 08 Javascript
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 Javascript
JS中appendChild追加子节点无效的解决方法
Oct 14 Javascript
Openlayers实现地图的基本操作
Sep 28 Javascript
在vue中使用image-webpack-loader实例
Nov 12 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
德生1994机评
2021/03/02 无线电
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
MySQL授权问题总结
2007/05/06 PHP
php表单敏感字符过滤类
2014/12/08 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
pyramid配置session的方法教程
2013/11/27 Python
Python在线运行代码助手
2016/07/15 Python
python实现爬取图书封面
2018/07/05 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
汽车专业毕业生自荐信
2013/11/03 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
办理房产过户的委托书
2014/09/14 职场文书
团队执行力培训心得体会
2015/08/15 职场文书