1、冒泡排序

冒泡算法是比较相邻的两项,如果前者比后者大,就交换他们。

假设一共有n项,那么一共需要n-1趟,第一趟需要交换n-1次,但是第一趟结束后,最后一项基本确定就是最大项了,所以第二次需要交换n-2次,第i次交换n-i次。

这种排序最好情况下时间复杂度是O(n),一般情况下时间复杂度是O(n²),最差情况下也是O(n²)。

这里是代码演示:

http://codepen.io/Krystal/pen/bZXOpo?editors=1010

2、选择排序

选择排序是找到最小的一项,然后和第一项交换位置,然后找到第二小的和第二项交换,依次类推,一共需要n-1次。

选择排序在所有情况下空间复杂度都是O(n²)。

代码演示:

http://codepen.io/Krystal/pen/XKvoZw

3、插入排序

插入排序是将前面的项看做数组,然后后面的项根据大小插入到对应的位置。比如第二项和第一项对比,他该插到第一项前面还是后面呢?第三项该插到一二项的哪个地方?

这个一般也需要插入n-1次。

插入排序最好情况下时间复杂度是O(n),其他情况下也都是O(n²)。

代码演示:

http://codepen.io/Krystal/pen/PzrXRJ

4、归并排序

原生js里面的sort方法,在firefox里面是用归并排序实现的,而在chrome里面是用快速排序的变体来实现的。

归并排序是一种分治的算法,他是将一个大数组分成无数的小数组,如果小数组里面只有一项,那么直接返回,如果大于一项,就继续分,接着小数组合并成一个大数组,合并的时候左右会进行比较大小,然后排序

代码演示:

http://codepen.io/Krystal/pen/jrNPQE

5、快速排序

快速排序也使用了分治的算法,也是把大数组分成小数组.

它会选择一个中间元,创建两个左右指针,然后分别从左右开始出发,如果左指针遇到比中间元大的数,它会停下来,而右边的如果遇到比中间元小的数,它也会停下来,然后两者交换位置。

接着两个指针继续前进,直到左指针超过了右指针,这样左边的数就会小于中间元,右边的数都会大于中间元,接下来分成左右数组,然后再进行上面的操作,直到数组完全排序。

代码演示:http://codepen.io/Krystal/pen/KgPVvZ

JS排序算法的更多相关文章

  1. 总结下js排序算法和乱序算法

    其实本人最怕的就是算法,大学算法课就感觉老师在讲天书,而且对于前端来说,算法在实际的应用中实在是很有限.毕竟算法要依靠大量的数据为基础才能发挥出算法的效率,就浏览器那性能,......是吧,退一万步说 ...

  2. 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...

  3. js排序算法汇总

    JS家的排序算法   十大经典算法排序总结对比 一张图概括: 主流排序算法概览 名词解释: n: 数据规模k:“桶”的个数In-place: 占用常数内存,不占用额外内存Out-place: 占用额外 ...

  4. 常用的 JS 排序算法整理

    关于排序算法的问题可以在网上搜到一大堆,但是纯 JS 版比较零散,之前面试的时候特意整理了一遍,附带排序效率比较. //1.冒泡排序 var bubbleSort = function(arr) { ...

  5. 自己写的JS排序算法

    这学期刚刚学完数据结构,之前就自己写了一点东西,现在整理一下. <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  6. js排序算法总结—冒泡,快速,选择,插入,希尔,归并

    相信排序是任何一个程序猿都会用到的东西,今天简单总结记录下常见的排序算法. 一.冒泡排序 说起冒泡排序,可能每个人都不会陌生,实现思路相当简单明了,就是不停的对数组进行两两比较,将较大(较小)的一项放 ...

  7. js排序算法总结——冒泡,快速,选择,插入,希尔,归并

    相信排序是任何一个程序猿都会用到的东西,今天简单总结记录下常见的排序算法. 一.冒泡排序 说起冒泡排序,可能每个人都不会陌生,实现思路相当简单明了,就是不停的对数组进行两两比较,将较大(较小)的一项放 ...

  8. 结构-行为-样式-Js排序算法之 直接插入排序

    最新因工作原因需要接触到算法,之前学习C++的时候有接触过算法,Javascript中实现算法其实也是大同小异.下面我讲下第一个实现的排序算法--直接插入排序.基本实现思路:假定一个数组中前n(n&g ...

  9. js排序算法总结

    快速排序 大致分三步: 1.找基准(一般是以中间项为基准) 2.遍历数组,小于基准的放在left,大于基准的放在right 3.递归 快速排序的平均时间复杂度是O(nlogn),最差情况是O(n²). ...

随机推荐

  1. XML解析之DOM解析技术案例

    Java代码: package com.xushouwei.xml; import java.io.File; import javax.xml.parsers.DocumentBuilder; im ...

  2. 2.13. 获取托管对象(Core Data 应用程序实践指南)

    用NSFetchRequest获取NSArray,里面都是托管对象.如果上下文里没有数据,就会从持久化存储区里获取. NSFetchRequest *request = [NSFetchRequest ...

  3. Delphi 中的常用事件

    OnActive 焦点称到窗体或控件时发生 OnClick 鼠标单击事件 OnDbClick 鼠标双击事件 OnClose和OnCloseQuery 当关闭一个窗体时就会响应OnClose和OnClo ...

  4. bmp图片显示

    文件IO项目: 在开发板屏幕上循环显示目录里的图片 a.按照一定的间隔循环显示目录里的bmp图片 b.实现手指滑动来显示目录里的图片(bmp,jpg)上一张,下一张 d1: 1.能操控屏幕(查询开发板 ...

  5. linux学习笔记----文件与目录管理

    一.目录处理命令 cd:切换目录 pwd:显示当前目录 mkdir:新建一个新的目录 rmdir:删除一个空的目录 1)pwd:显示当前目录 pwd [-P] P:显示出当前的路径,而非使用连接(li ...

  6. Java中泛型数组的使用

    package com.srie.testjava; import java.util.ArrayList; import java.util.List; public class TestClass ...

  7. 开发团队在TFS中使用Git Repository (二)

    使用Git作分支时,仅仅是对提交历史记录的一个引用,创建分支成本非常低,分支的切换快且简单.在分支管理方面,相对其他的版本管理工具,Git可谓是一骑绝尘. 开发过程中,我们可以针对任何的大小功能进行分 ...

  8. 使用PMD进行代码审查

    很久没写博客了,自从上次写的设计模式的博客被不知名的鹳狸猿下架了一次之后兴趣大减,那时候就没什么兴致写博客了,但是这段时间还没有停下来,最近也在研究一些其他的东西,目前有点想做点东西的打算,但好像也没 ...

  9. 如何用CSS进行网页布局---学习总结

    页面布局:对页面的文字.图形或表格进行格式设置.包括字体.字号.颜色纸张大小和方向以及页边距等 页面布局分为4种: 一栏布局 两栏布局 三栏布局 混合布局 灵活利用float.position对页面进 ...

  10. asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...