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 ui1.7 dialog只能弹出一次问题
Aug 27 Javascript
JavaScript Event学习第九章 鼠标事件
Feb 08 Javascript
怎么选择Javascript框架(Javascript Framework)
Nov 22 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
JS检测数组类型的方法小结
Mar 14 Javascript
基于React实现表单数据的添加和删除详解
Mar 14 Javascript
解决vue里碰到 $refs 的问题的方法
Jul 13 Javascript
浅谈React的最大亮点之虚拟DOM
May 29 Javascript
VUE 全局变量的几种实现方式
Aug 22 Javascript
vue+AI智能机器人回复功能实现
Jul 16 Javascript
jQuery实现评论模块
Aug 19 jQuery
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
收音机术语解释
2021/03/01 无线电
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
python分析网页上所有超链接的方法
2015/05/08 Python
使用python3实现操作串口详解
2019/01/01 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
建筑个人求职信范文
2014/01/25 职场文书
高中学生期末评语
2014/04/25 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
访谈节目策划方案
2014/05/15 职场文书
员工安全责任书范本
2014/07/24 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
小学毕业教师寄语
2019/06/21 职场文书
详解NodeJS模块化
2021/06/15 NodeJs
Oracle使用别名的好处
2022/04/19 Oracle
python的html标准库
2022/04/29 Python
Python实现聚类K-means算法详解
2022/07/15 Python