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 相关文章推荐
超级简单的图片防盗(HTML),好用
Apr 08 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
Jun 23 Javascript
jQuery获得内容和属性示例代码
Jan 16 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
Feb 04 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
javascript相关事件的几个概念
May 21 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
Aug 21 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
Jul 08 jQuery
jquery之基本选择器practice(实例讲解)
Sep 30 jQuery
基于vue-cli npm run build之后vendor.js文件过大的解决方法
Sep 27 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
Aug 06 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图像处理函数大全(推荐收藏)
2013/07/11 PHP
php生成静态页面的简单示例
2014/04/17 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
详解Python中的各种函数的使用
2015/05/24 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
Python语言的变量认识及操作方法
2018/02/11 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
关于毕业的中学校园广播稿
2014/01/26 职场文书
初二学习计划书范文
2014/04/27 职场文书
学习雷锋标语
2014/06/25 职场文书
三八妇女节标语
2014/10/09 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
2015入党自传书范文
2015/06/26 职场文书
教你一步步实现一个简易promise
2021/11/02 Javascript
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
git stash(储藏)的用法总结
2022/06/25 Servers