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 相关文章推荐
JS JavaScript获取Url参数,src属性参数
Mar 09 Javascript
Jquery知识点三 jquery表单对象操作
Jan 17 Javascript
jQuery中delegate与on的用法与区别示例介绍
Dec 20 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
May 16 Javascript
jQuery插件 Jqplot图表实例
Jun 18 Javascript
80%应聘者都不及格的JS面试题
Mar 21 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
在Web关闭页面时发送Ajax请求的实现方法
Mar 07 Javascript
jQuery表单校验插件validator使用方法详解
Feb 18 jQuery
ES6中的Javascript解构的实现
Oct 30 Javascript
Vue vee-validate插件的简单使用
Jun 22 Vue.js
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/02/14 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
jQuery实现图片轮播特效代码分享
2015/09/15 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
python进程管理工具supervisor使用实例
2014/09/17 Python
python3.6的venv模块使用详解
2018/08/01 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
医学生个人求职信范文
2014/02/07 职场文书
语文教学随笔感言
2014/02/18 职场文书
书法大赛策划方案
2014/06/04 职场文书
解除劳动合同协议书
2014/09/17 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
自我工作评价范文
2015/03/06 职场文书
2015年教师节广播稿
2015/08/19 职场文书
纪念建国70周年演讲稿
2019/07/19 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers