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 相关文章推荐
幻宇的层模拟窗口效果-提供演示和下载
Jan 20 Javascript
JavaScript入门教程(2) JS基础知识
Jan 31 Javascript
JQuery里选择超链接的实现代码
May 22 Javascript
THREE.JS入门教程(5)你应当知道的十件事
Jan 24 Javascript
javascript 自定义回调函数示例代码
Sep 26 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
Jul 18 Javascript
JS实现霓虹灯文字效果的方法
Aug 06 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
Jan 08 Javascript
JQuery异步加载PartialView的方法
Jun 07 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
Vue中div contenteditable 的光标定位方法
Aug 25 Javascript
angularjs模态框的使用代码实例
Dec 20 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实现Socket服务器的代码
2008/04/03 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
js命名空间写法示例
2015/12/18 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
vue实现登录功能
2020/12/31 Vue.js
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python语言的12个基础知识点小结
2014/07/10 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python编程实现蚁群算法详解
2017/11/13 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
WxPython实现无边框界面
2019/11/18 Python
德国自行车商店:Tretwerk
2019/06/21 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
一套C#面试题
2013/10/09 面试题
护理专科毕业推荐信
2013/11/10 职场文书
大学生职业生涯规划书范文
2014/01/04 职场文书
领导失职检讨书
2014/02/24 职场文书
三好生演讲稿
2014/09/12 职场文书
运动员入场前导词
2015/07/20 职场文书
Redis三种集群模式详解
2021/10/05 Redis