JavaScript中冒泡排序
在我大学的时候,就已经接触到过很多的排序方式,只是那时候听得还很懵懂,大概知道这么个东西,也对冒泡排序有点印象,但真要我写,我是写不出来的。最近,在回顾js基础的时候,又接触到了冒泡排序。于是,就把冒泡排序又仔细的研究了一遍,以下是我个人的理解。
在讲冒泡排序之前,首先要知道的就是冒泡排序的原理。
说的简单点,冒泡排序就是数组每中两个相邻的数字进行比较,如果后面的数字比前面的数字小,那么就让这两个数字交换位置,比如:
arr=[5,3];
数组中有两个数值,前面的数比后面的数大,就让他们两个交换位置,数组就变成了
arr=[3,5];
这是最简单版本的,那么三个数字的时候呢,
arr=[5,3,1];
这时候就让第一个数字5跟第二个数字3比较,5比3大,所以5跟3调换位置,数组就变成了
arr=[3,5,1];
这时候再让第二个数字5跟第三个数字1比较,5比较大,所以5跟1调换位置,数组就变成了
arr=[3,1,5];
这样,一轮循环就就行完了,此时,最大的数已经被排序到了最后,很明显,数组还没有排序完成,所以就要进行第二轮循环
再让第一个数字3跟第二个数字1进行比较,3比较大,所以3跟1调换位置,数组就变成了
arr=[1,3,5];
这个时候,重点就到了,要不要再把第二个数字跟最后一个数字进行比较,这里我说最后一个数字而不是第三个数字,就是因为在第一次排序的时候,已经排序出了最大的那个数字,并且放在了最后,所以就不用在拿倒数第二个数字跟最后一个数字比较了。
所以,继续给数组增加内容,变成一个含有n个值得数组,
让第一个数字跟第二个数字进行比较,如果第一个数字比第二个大,就让两个数字交换位置,然后再让第二个数字跟第三个数字进行比较,如果第二个数字比第三个数字小,那就不做任何改变,继续让第三个数字跟第四个数字比较,一直到第n-1个数字,此时,第n-1个数肯定是之前数字中最大的,再拿n-1跟n比较,如果n-1大于n,那么n-1就跟n交换位置,如果n-1小于n,那么这两个数的位置不变,此时,n就是 数组中最大的那个数,并且放在了数组的最后面。第一轮循环结束。
然后进入第二轮循环,重复第一轮的过程,直到n-2这个数,同上,n-2肯定是之前数字中最大的。拿n-2跟n-1比较,如果n-2大于n-1,那么n-2就跟n-1交换位置,否则的话n-1跟n-2的位置不变,此时n-1就是数组中第二大的数,并且放在数组的倒数第二个位置,第二轮循环结束。
重复这样的循环,直到排到第一个数跟第二个数为止,这样,整个数组就肯定是从小到大的排列了。不过,这样子的排序并不是一定要排到第一个数字跟第二个数字为止,因为,有可能排完中间某两个数之后,数组就已经是按照从小到大的排列了。比如:
原来的数组是这样的
arr=[1,2,4,5,3];
在经过第一轮冒泡排序之后,数组就变成了
arr=[1,2,4,3,5];
然后数组进入第二轮冒泡排序,数组就变成了
arr=[1,2,3,4,5];
很明显,数组已经排序完成了,此时,但是按照之前说的,数组还会继续排序。这样,会很消耗系统的资源,所以我们要设置一个标志,来控制循环的结束。如果一轮循环中,没有任何两个数字交换位置,就意味着数组已经排序完成了,就没有必要再进行之后的排序了。这样,我们就可以减少排序的次数,加快排序的时间,减少系统资源的消耗。
其实,冒泡排序在写的时候并没有那么难,主要就是三点。首先,就是要用一层循环来控制循环的次数,其次,再用一层循环来给相邻两个数字做比较,最后,要设置一个标志,来控制循环的时间复杂度,从而减少没必要的循环。
下图是一个用函数封装的关于冒泡排序的代码。

就这样,冒泡排序就完了,只要了解冒泡排序的原理,然后再按着思路自己写写看,冒泡排序其实也不是那么难。
JavaScript中冒泡排序的更多相关文章
- Javascript中,实现十大排序方法之一(冒泡排序及其优化设想)
冒泡排序的Javascript实现 首先定义一个取值范围在(0~100000)之间的随机值的长度为10万的数组, function bubbleSort(arr) { console.time('冒泡 ...
- JavaScript实现冒泡排序、快速排序、插入排序
JavaScript实现冒泡排序.快速排序.插入排序 时间:2014-01-09 18:05:51 来源: 作者:胡晗 冒泡排序的基本思想:所谓冒泡就是泡泡一个一个往上冒,让体积最轻的泡泡浮在最上 ...
- javascript中的sort()方法
现在在学习javascript中,发现sort()函数是有点奇怪的东西(可能是本人水平的问题-_-!),于是就在这里记录一下自己找到的东西吧.sort()这个方法的参数很奇怪,必须是函数,但也是可选参 ...
- javascript的冒泡排序, 快速排序, 选择排序, 插入排序
冒泡排序, 最经典的排序, 把比较大的数字往后放, 和选择排序恰恰相反: <!DOCTYPE html> <html lang="en"> <head ...
- JavaScript中简单排序总结
JavaScript中简单排序总结 冒泡排序 经典排序算法, 双重for循环 在第二个for循环的时候, j < arr.len -1 -i , 这一步的优化很重要 function bullS ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- javascript中的this与函数讲解
前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- javascript中的操作符详解1
好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...
随机推荐
- QT第四天学习
回顾: 1.信号与槽 public slots: //先声明后实现 signals: //只需要声明 connect(sender,SIGNAL(signal()),receiver,SLOT(slo ...
- netcat工具的使用
用途:网络管理工具. 可以读,写TCP或UDP 网络连接.简写为:nc 常见参数: -h 帮助信息 -l 坚挺模式 -n 指定IP地址 -p 指定端口号 -v 详细输出 1 客户端:很容易建立一个客 ...
- Spring 使用context:annotation-config的设置
Spring 使用context:annotation-config的设置: 还是需要声明Bean的,并且还可能自己定义Annotation: xml: <?xml version=" ...
- Weblogic常见故障常:JDBC Connection Pools
http://blog.csdn.net/woshixuye/article/details/24122579 有些时候是数据库连接池出现了问题,测试的时候显示没有连接池了,重启WebLogic都不行 ...
- FP Tree算法原理总结
在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题,FP Tree算法(也称F ...
- 最简单的Linux虚拟机磁盘扩容方法
思路:1.虚拟机增加磁盘容量: 2.将增加的磁盘容量增加到系统分区中: 准备阶段: 下载Gparted软件:https://sourceforge.net/projects/gparted/files ...
- 个人对现在大众对perl的偏见的一些见解
最近我都在一些论坛和交流社区学习,发现很多人对perl有很大的偏见. 以我学习那么久的Perl来说吧,也算是有一些小经验了,所以我总结了大家对perl的偏见的原因,无非就是是下面两个的两个原因: 1. ...
- EmitMapper 和TinyMapper 两者简单对比
EmitMapper 和TinyMapper 两者的性能都是很高,相比autoMapper 速度不知道快了多少倍,因为使用的最多EmitMapper,所在业余时间做了一下测试对比. 测试数据:10万条 ...
- 《JAVASCRIPT高级程序设计》节点层次和DOM操作技术
DOM可以将任何HTML和XML文档描绘成一个由多层次节点构成的结构.节点分为几种不同的类型,每种类型分别表示文档中不同的信息,每种类型都继承与Node接口,因此都共同享有一些属性和方法,同时,也拥有 ...
- C# 6 与 .NET Core 1.0 高级编程 - 37 章 ADO.NET
译文,个人原创,转载请注明出处,有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET --------------- ...