JS 冒泡排序详解
冒泡排序原理:比较相邻两个数的大小,如果第一个数大于第二个数,那么交换位置,从第一位数开始,对后面每一对相邻的数据进行同样的比较和交换,直到最后没有任何一位需要进行比较大小和交换;
思路演算:
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 冒泡排序详解的更多相关文章
- js对象详解(JavaScript对象深度剖析,深度理解js对象)
js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
- Vue.js项目详解
还是以Blog项目来讲解,最近我本人利用闲暇时间,以博客作为参考学习一些新的技术并尝试之前没有尝试过的思路来玩玩. 技术看似枯燥,但是带有一个目的来学,你会发现还是蛮有趣的. 主要实践的就是前后端分离 ...
- JS 面向对象详解
面向对象详解1 OO1.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- 开胃小菜——impress.js代码详解
README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看i ...
- jquery图片切换插件jquery.cycle.js参数详解
转自:国人的力量 blog.163.com/xz551@126/blog/static/821257972012101541835491/ 自从使用了jquery.cycle.js,我觉得再也不用自己 ...
- 值得收藏的js原型详解
从虚无到Object 起初,地是空虚混沌,渊面黑暗:这时候一切还是null 神说,要有原型,于是就有了prototype 原型从凭空产生,于是需要一个指向于null的特征,人们把这种特征叫做隐式原型, ...
- 第三天:JS事件详解-事件流
学习来源: F:\新建文件夹 (2)\HTML5开发\HTML5开发\04.JavaScript基础\6.JavaScript事件详解 学习内容: 1)基础概念 2)举例说明: 代码如上,如果用事件 ...
- 第二十二课:js事件原理以及addEvent.js的详解
再看这篇博客之前,希望你已经对js高级程序编程一书中的事件模块进行了详读,不然我只能呵呵了. document.createEventObject,在IE下创建事件对象event. elem.fire ...
随机推荐
- javascript中变量命名规则
前言 变量的命名相对而言没有太多的技术含量,今天整理有关于变量命名相关的规则,主要是想告诉大家,虽然命名没有技术含量,但对于个人编码,或者说一个团队的再次开发及阅读是相当有用的.良好的书写规范可以让你 ...
- 基于USB接口芯片CH372的人机接口设备设计与实现(转)
摘 要: 基于一种新型USB 总线接口芯片CH372,设计出一种人机接口设备-USB 鼠标.阐述了CH372 的工作原理和特点,给出了系统的硬件电路图:在软件设计中,分析了HID 类设备描述符枚举过程 ...
- 基于webhook方案的Git自动部署方案
之前已经用Git实现了自己博客的提交自动部署,并自动提交到GitHub和coding以备不时之需.平时项目代码都托管在Coding或者GitHub上,也已经用上了coding提供的webhook功能, ...
- 【转载】java 获取路径的各种方法
转载只供个人学习参考,查看请前往原出处:http://www.cnblogs.com/guoyuqiangf8/p/3506768.html 主要方法有: (1).request.getRealPat ...
- 从游戏到汽车 “明星IP”的发财轨迹
"明星IP"的发财轨迹" title="从游戏到汽车 "明星IP"的发财轨迹"> 移动互联网时代的开启,不仅彻底重构了大众生 ...
- 3D打印如何重组制造格局?
全球化的竞争正变得毫无底线,国与国之间只有利益,没有同情,也就是说美国品牌想把自己的工厂移回本土,是不会考虑中国工人的生存现状的,更不会顾及这里的GDP和环境问题,甚至还会依靠经济能力去奴役其他国家 ...
- 【基础篇】hexo博客搭建教程
[基础篇]搭建hexo博客(一) 作者:Huanhao bilibili:Mrhuanhao 前言 你是否想拥有属于自己的博客?你是否无奈与自己不会写网站而烦恼? 不要担心,本系列教程将会实现你白嫖的 ...
- ip修改成域名
将ip修改成域名,这样的话可以使程序变得更加健壮,别人不能直接看见你的ip地址. 后来总结下分享给大家.首先找到hosts文件的位置,这个文件是系统dns默认查找的文件. windows 系统:C:\ ...
- unittest实战(三):用例编写
# coding:utf-8import unittestfrom selenium import webdriverimport timefrom ddt import ddt, data, unp ...
- vue 组件中添加样式不生效
如何产生 在开发项目中遇到在组件中添加样式不生效的情况.具体场景如下 //// vue 组件 <template> <div class="box" data-v ...