javascript基本常用排序算法解析


Posted in Javascript onSeptember 27, 2017

备注:内容大部分从网上复制,代码为自己手写。仅做知识的温故知新,并非原创。

1.冒泡排序(Bubble Sort)

(1)算法描述

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

(2)算法描述和实现

具体算法描述如下:

<1>.比较相邻的元素。如果第一个比第二个大,就交换它们两个;<2>.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;<3>.针对所有的元素重复以上的步骤,除了最后一个;<4>.重复步骤1~3,直到排序完成。

JavaScript代码实现:

javascript基本常用排序算法解析

改进冒泡排序:设置一标志性变量pos,用于记录每趟排序中最后一次进行交换的位置。由于pos位置之后的记录均已交换到位,故在进行下一趟排序时只要扫描到pos位置即可。

改进后算法如下:

javascript基本常用排序算法解析

传统冒泡排序中每一趟排序操作只能找到一个最大值或最小值,我们考虑利用在每趟排序中进行正向和反向两遍冒泡的方法一次可以得到两个最终值(最大者和最小者) , 从而使排序趟数几乎减少了一半。

改进后的算法为:

javascript基本常用排序算法解析

三种算法的运行时间为:

javascript基本常用排序算法解析

由运行结果可以看出时间复杂度更低,耗时更短了。大家可以亲自尝试下,运行的时候最好将三种算法写在一个文件中运行,否则会由于浏览器等原因产生误差。

冒泡排序的动态图演示:

javascript基本常用排序算法解析

(3)算法分析

最佳情况:T(n) = O(n)

当输入的数据已经是正序时

最坏情况:T(n) = O(n2)

当输入的数据是反序时

平均情况:T(n) = O(n2)

2.选择排序(Selection Sort)

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n²)的时间复杂度…..所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。

(1)算法简介

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

(2)算法描述和实现

n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:

<1>.初始状态:无序区为R[1..n],有序区为空;<2>.第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;<3>.n-1趟结束,数组有序化了。

Javascript代码实现:

javascript基本常用排序算法解析

javascript基本常用排序算法解析

(3)算法分析

最佳情况:T(n) = O(n2)最差情况:T(n) = O(n2)平均情况:T(n) = O(n2)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
javascript new 需不需要继续使用
Jul 02 Javascript
javascript 表单规则集合对象
Jul 21 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
May 14 Javascript
javascript实时显示北京时间的方法
Mar 12 Javascript
基于jQuery实现美观且实用的倒计时实例代码
Dec 30 Javascript
浅析JS中对函数function的理解(基础篇)
Oct 14 Javascript
Javascript中引用类型传递的知识点小结
Mar 06 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
Jul 07 Javascript
微信小程序框架wepy之动态控制类名
Sep 14 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
Sep 21 Javascript
javascript匿名函数中的'return function()'作用
Oct 15 Javascript
Angularjs cookie 操作实例详解
Sep 27 #Javascript
js移动端图片压缩上传功能
Aug 18 #Javascript
微信小程序报错:this.setData is not a function的解决办法
Sep 27 #Javascript
EasyUI Tree树组件无限循环的解决方法
Sep 27 #Javascript
详解微信小程序Page中data数据操作和函数调用
Sep 27 #Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 #Javascript
微信小程序中button组件的边框设置的实例详解
Sep 27 #Javascript
You might like
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
php共享内存段示例分享
2014/01/20 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
php查看网页源代码的方法
2015/03/13 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
JavaScript计时器示例分析
2015/02/05 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
浅析Python多线程下的变量问题
2015/04/28 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
贷款委托书范本
2014/04/08 职场文书
安全生产责任书范本
2014/04/15 职场文书
老公给老婆的保证书
2014/04/28 职场文书
校园学雷锋广播稿
2014/10/08 职场文书