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 相关文章推荐
Extjs学习笔记之九 数据模型(上)
Jan 11 Javascript
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
Sep 16 Javascript
jquery插件jquery.confirm弹出确认消息
Dec 22 Javascript
Angular.Js的自动化测试详解
Dec 09 Javascript
js实现移动端导航点击自动滑动效果
Jul 18 Javascript
vue实现登录后页面跳转到之前页面
Jan 07 Javascript
vue mint-ui tabbar变组件使用
May 04 Javascript
vue-router重定向和路由别名的使用讲解
Jan 19 Javascript
在Layui中实现开关按钮的效果实例
Sep 29 Javascript
浅谈微信小程序列表埋点曝光指南
Oct 15 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 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简单实现多维数组排序的方法
2016/09/30 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
python numpy格式化打印的实例
2018/05/14 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
python实现最小二乘法线性拟合
2019/07/19 Python
Django对models里的objects的使用详解
2019/08/17 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
信贷客户经理岗位职责
2015/04/09 职场文书
员工表扬信怎么写
2015/05/05 职场文书
飞屋环游记观后感
2015/06/08 职场文书
高中团支书竞选稿
2015/11/21 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA