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 相关文章推荐
游戏人文件夹程序 ver 3.0
Jul 14 Javascript
基于JQuery的密码强度验证代码
Mar 01 Javascript
jquery提交form表单简单示例分享
Mar 03 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
Nov 04 Javascript
jQuery实现jQuery-form.js实现异步上传文件
Apr 28 jQuery
Bootstrap响应式表格详解
May 23 Javascript
bootstrap switch开关组件使用方法详解
Aug 22 Javascript
动态创建Angular组件实现popup弹窗功能
Sep 15 Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 Javascript
jQuery实现菜单的显示和隐藏功能示例
Jul 24 jQuery
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
Jul 26 Javascript
解决vuecli3中img src 的引入问题
Aug 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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
监控微信小程序中的慢HTTP请求过程详解
2019/07/05 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
python使用pycharm环境调用opencv库
2018/02/11 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
python中的for循环
2018/09/28 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
Python实现简单猜数字游戏
2021/02/03 Python
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
股票投资建议书
2014/05/19 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
文明礼仪倡议书
2015/04/28 职场文书
早恋主题班会
2015/08/14 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
Python绘画好看的星空图
2022/03/17 Python
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers