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 选择器 xpath 语法应用
May 13 Javascript
img onload事件绑定各浏览器均可执行
Dec 19 Javascript
js日期、星座的级联显示代码
Jan 23 Javascript
javascript中的事件代理初探
Mar 08 Javascript
常见的javascript跨域通信方法
Dec 31 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
Sep 12 Javascript
微信小程序 form组件详解
Oct 25 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
May 22 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
Jun 15 Javascript
深度了解vue.js中hooks的相关知识
Jun 14 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
Aug 16 Javascript
js实现简单的秒表
Jan 16 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中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
js下弹出窗口的变通
2007/04/18 Javascript
JavaScript 模拟用户单击事件
2009/12/31 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
法国在线药房:DoctiPharma
2020/10/21 全球购物
3.12植树节活动总结2014
2014/03/13 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
群众路线领导对照材料
2014/08/23 职场文书
国庆横幅标语
2014/10/08 职场文书
实习工作表现评语
2014/12/31 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
小学教代会开幕词
2016/03/04 职场文书