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四种调用模式和this示例介绍
Jan 02 Javascript
jQuery实现倒计时按钮功能代码分享
Sep 03 Javascript
javascript 闭包详解
Jul 02 Javascript
jQuery动态加载css文件实现方法
Jun 15 Javascript
Angular 4中如何显示内容的CSS样式示例代码
Nov 06 Javascript
JS+CSS实现滚动数字时钟效果
Dec 25 Javascript
php 解压zip压缩包内容到指定目录的实例
Jan 23 Javascript
AnglarJs中的上拉加载实现代码
Feb 08 Javascript
vue forEach循环数组拿到自己想要的数据方法
Sep 21 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
Feb 15 Javascript
vue实现点击按钮切换背景颜色的示例代码
Jun 23 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 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 七大优势分析
2009/06/23 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
php实现学生管理系统
2020/03/21 PHP
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
从Python的源码来解析Python下的freeblock
2015/05/11 Python
django批量导入xml数据
2016/10/16 Python
利用python画一颗心的方法示例
2017/01/31 Python
Python中logging实例讲解
2019/01/17 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
python实现网页录音效果
2020/10/26 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
希特勒经典演讲稿
2014/05/19 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
检察院起诉意见书
2015/05/20 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python