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中有许多操作符,但是许多初学者并不理解 ...
随机推荐
- mysql数据库锁定机制
前言 为了保证数据的一致完整性,任何一个数据库都存在锁定机制.锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就 成为了各种数据库的核心技术之一.本章将对MySQL中两 ...
- Sublime Text3 高亮显示Jade语法 (Windows 环境)
首先下载git clone https://github.com/miksago/jade-tmbundle.git Jade 然后打开sublime --> 菜单栏 --> Prefer ...
- Varnish+Xcache构建高性能WEB构架初探
本文主要讲述web优化方案和缓存工具的调研及使用.根据目前的测试结果来看,采用varnish+xcache作为 apache和 php缓存这种架构具有高并发.高稳定性,易扩展等优点,服务器的动态请求处 ...
- MyEclipse 2014去除derby
在MyEclipse安装目录下打开configuration\org.eclipse.equinox.simpleconfigurator\bundles.info 搜索derby找到com.genu ...
- 结合swiper使用图片懒加载
本人渣渣一枚,技术一般,记录下笔记,大神勿喷,可以留下优化建议,谢谢 最近刚刚做了个展示型的网站,使用swiper搭的框架,因为图片比较多,所 以首次加载稍微有些慢,虽然压缩过了,但是尽可能的优化吧, ...
- 我的Linux软件集
把我常用的软件记下来,以后重装安装的时候方便一些- 这个博文会不断更新的- 开发工具类 Monodevelop 编写C#控制台程序和GTK#窗口程序,很好,虽然没有VS强大,但是够用了 CodeBlo ...
- 新手初学Redis之基础知识命令
笔者最初接触Redis是因为了解了一些nosql方面的知识,觉得nosql是一个很有意思的方面.像其中的mongodb,redis等等.当初也没有深入的去了解Redis,直到自己前段时间在写一个web ...
- Form开发:字段关系-消息-快速编码-参数和系统变量
1.字段关系 清除依赖字段:在挂LOV的名称字段的WHEN-VALIDATE-ITEM调用:app_field.clear_dependent_fields 设置字段依赖:在主字段的WHEN ...
- We Chall-Prime Factory-Writeup
MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...
- Vue.js 系列教程 ②
这是关于 JavaScript 框架 Vue.js 五个教程的第二部分.在这一部分,我们将学习组件,Props 以及 Slots.这不是一个完整的指南,而是基础知识的概述,所以你可以了解Vue.js ...