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将NodeList作为Array数组处理的方法
Jul 09 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
Dec 12 Javascript
JS中的构造函数详细解析
Mar 10 Javascript
一个简单的Node.js异步操作管理器分享
Apr 29 Javascript
javaScript中with函数用法实例分析
Jun 08 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
Aug 24 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
Jun 13 Javascript
JavaScript数据类型转换的注意事项
Jul 31 Javascript
js编写选项卡效果
May 23 Javascript
JS判断非空至少输入两个字符的简单实现方法
Jun 23 Javascript
vue弹窗组件的实现示例代码
Sep 10 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
Apr 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/11/12 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
phpStorm2020 注册码
2020/09/17 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
一个原生的用户等级的进度条
2010/07/03 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
介绍一下#error预处理
2015/09/25 面试题
思想政治教育专业个人求职信范文
2013/12/20 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
销售队伍口号
2014/06/11 职场文书
合作协议书范文
2014/08/20 职场文书
基层党支部承诺书
2015/04/30 职场文书
详解Python requests模块
2021/06/21 Python
Python代码实现双链表
2022/05/25 Python