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 tools之tabs 选项卡/页签
Jul 25 Javascript
jQeury淡入淡出需要注意的问题
Sep 08 Javascript
Jquery获取复选框被选中值的简单方法
Jul 04 Javascript
JQuery给元素绑定click事件多次执行的解决方法
May 29 Javascript
node.js中的fs.appendFile方法使用说明
Dec 17 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
jQuery实现微信长按识别二维码功能
Aug 26 Javascript
Bootstrap Search Suggest使用例子
Dec 21 Javascript
Angularjs中date过滤器失效的问题及解决方法
Jul 06 Javascript
layui table 获取分页 limit的方法
Sep 20 Javascript
React组件设计模式之组合组件应用实例分析
Apr 29 Javascript
OpenLayers3实现测量功能
Sep 25 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 批量替换程序的具体实现代码
2013/10/04 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
Vue Router的手写实现方法实现
2020/03/02 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
公立医院改革实施方案
2014/03/14 职场文书
音乐节策划方案
2014/06/09 职场文书
社区服务活动小结
2014/07/08 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
出国导师推荐信
2015/03/25 职场文书
论语读书笔记
2015/06/26 职场文书