冒泡排序原理:比较相邻两个数的大小,如果第一个数大于第二个数,那么交换位置,从第一位数开始,对后面每一对相邻的数据进行同样的比较和交换,直到最后没有任何一位需要进行比较大小和交换;

思路演算:

arr = [2, 5, 6, 3, 1];
//两两比较大小,如果大于那么交换
//2 > 5 ? 不交换,arr = [2, 5, 6, 3, 1]
//5 > 6 ? 不交换,arr = [2, 5, 6, 3, 1]
//6 > 3 ? 交换,arr = [2, 5, 3, 6, 1]
//6 > 1 ? 交换,arr = [2, 5, 3, 1, 6]
第一轮的数据两两比较大小,交换位置就完成了,最终数组中最大的数据 6 被交换到了最后,沉入数组末尾

//2 > 5 ?  不交换,arr = [2, 5, 3, 1, 6]
//5 > 3 ? 交换,arr = [2, 3, 5, 1, 6]
//5 > 2 ? 交换,arr = [2, 3, 1, 5, 6]
第二轮的数据两两比较大小,交换位置就完成了,最终数组中第二大的数据 5 被交换到了数组后面
//2 > 3 ?  不交换,arr = [2, 3, 1, 5, 6]
//3 > 1 ? 交换,arr = [2, 1, 3, 5, 6]

第三轮的数据两两比较大小,交换位置就完成了
//2 > 1 ?  交换,arr = [1, 2, 3, 5, 6]
第四轮的数据两两比较大小,交换位置就完成了

经过四轮的数据比较,显而易见,数据已经完成了升序排列。

从上面的演算中发现规律:
  数组的长度 arr.length = 5,循环了4轮就完成了排序,
  每一轮的循环 进行了 两两比较大小,
  并且每一轮的中的 两两比较 次数都比前一次少,
  直到没有两个数据可以拿来比较为止。
 for(var i = 0; i < arr.length - 1; i++){
  //表示要进行几轮比较
}
 for(var i = 0; i < arr.length - 1; i++){
for(var j = 0; j < arr.length - 1 - i;j++){
// 每一轮的数据比较都是 从数组的 下标0 开始,
// 每一轮,两两比较的次数都比上一轮少1 次
// 当 i=0 的时候, j < 5 - 1 - 0 即 j < 4
      // 当 i=1 的时候, j < 5 - 1 - 1 即 j < 3
      // 依次类推
}
}
 for(var i = 0; i < arr.length - 1; i ++){
for(var j = 0; j < arr.length - 1 - i: j++){
       // 定义一个临时变量,用来存储较大的那个数据
var temp;
       // 比较数组中相邻的那个数,如果第一个数比第二个数大,那么
if(arr[j] > arr [j+1]){
         // 将较大的数 存放在 temp 变量中
temp = arr[j];
         // 将 较小的数据 赋值给 前一位
arr[j] = arr[j+1];
         // 将 存放了较大数据的临时变量 赋值给 后一位, 完成数据的交换位置
arr[j+1] = temp;
}
}
}

JS 冒泡排序详解的更多相关文章

  1. js对象详解(JavaScript对象深度剖析,深度理解js对象)

    js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...

  2. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

  3. Vue.js项目详解

    还是以Blog项目来讲解,最近我本人利用闲暇时间,以博客作为参考学习一些新的技术并尝试之前没有尝试过的思路来玩玩. 技术看似枯燥,但是带有一个目的来学,你会发现还是蛮有趣的. 主要实践的就是前后端分离 ...

  4. JS 面向对象详解

    面向对象详解1 OO1.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  5. 开胃小菜——impress.js代码详解

    README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看i ...

  6. jquery图片切换插件jquery.cycle.js参数详解

    转自:国人的力量 blog.163.com/xz551@126/blog/static/821257972012101541835491/ 自从使用了jquery.cycle.js,我觉得再也不用自己 ...

  7. 值得收藏的js原型详解

    从虚无到Object 起初,地是空虚混沌,渊面黑暗:这时候一切还是null 神说,要有原型,于是就有了prototype 原型从凭空产生,于是需要一个指向于null的特征,人们把这种特征叫做隐式原型, ...

  8. 第三天:JS事件详解-事件流

    学习来源: F:\新建文件夹 (2)\HTML5开发\HTML5开发\04.JavaScript基础\6.JavaScript事件详解 学习内容:  1)基础概念 2)举例说明: 代码如上,如果用事件 ...

  9. 第二十二课:js事件原理以及addEvent.js的详解

    再看这篇博客之前,希望你已经对js高级程序编程一书中的事件模块进行了详读,不然我只能呵呵了. document.createEventObject,在IE下创建事件对象event. elem.fire ...

随机推荐

  1. 如何安装与配置MySQL

    关键词:MySQL,安装,配置 这一节,我们讨论一下MySQL的安装配置与卸载 下载 网址:https://dev.mysql.com/downloads/mysql/ 选择社区版,找到对应的电脑,开 ...

  2. PHP RFI 的小tip

    有关PHP include的帖子网上已经很多了,wooyun的知识库里面也有一篇总结的很好的文章,传送门:http://drops.wooyun.org/tips/3827,今晚在看书的时候看到RFI ...

  3. Oracle的LOB(CLOB)大字段以及(SYS_LOB***$$)清理

    文章结构如下: 1.背景: 生产上查询那些大表然后进行清理,然而发现有SYS_LOB0000093441C00002$$这中表段占用30G(只保留一个月,如果保留更久会更大). 2.LOB介绍 Ora ...

  4. Java入门教程四(字符串处理)

    Java 语言的文本数据被保存为字符或字符串类型.字符及字符串的操作主要用到 String 类和 StringBuffer 类,如连接.修改.替换.比较和查找等. 定义字符串 直接定义字符串 直接定义 ...

  5. 一文了解各大图数据库查询语言(Gremlin vs Cypher vs nGQL)| 操作入门篇

    文章的开头我们先来看下什么是图数据库,根据维基百科的定义:图数据库是使用图结构进行语义查询的数据库,它使用节点.边和属性来表示和存储数据. 虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数 ...

  6. 【30分钟学完】canvas动画|游戏基础(4):边界与碰撞

    前言 本系列前几篇中常出现物体跑到画布外的情况,本篇就是为了解决这个问题. 阅读本篇前请先打好前面的基础. 本人能力有限,欢迎牛人共同讨论,批评指正. 越界检测 假定物体是个圆形,如图其圆心坐标即是物 ...

  7. html/css系列-图片上下居中

    本文详情:http://www.zymseo.com/276.html图片上下居中的问题常用的几种方法:图片已知大小和未知大小,自行理解 .main{ width: 400px;height: 400 ...

  8. AJAX 的 Ajax返回数据之前的loading等待效果(gif效果等)

    首先,我们通过ajax请求,向后台传递参数,然后后台经过一系列的运算之后向前台返还数据,我希望在等待数据成功返还之前可以展示一个loading.gif图 不废话,在页面上执行点击事件(<a sc ...

  9. Python基础-两个乒乓球队进行比赛,各出三人。

    两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单. L1 = [ ...

  10. Mysql(Mariadb)数据库之Information Schema 库中GLOBAL_VARIABLES表 and SESSION_VARIABLES 表分析

    Information Schema GLOBAL_VARIABLES and SESSION_VARIABLES Tables The Information Schema GLOBAL_VARIA ...