冒泡排序、选择排序与插入排序复杂度都是二次方级别的,放在一起说吧。

  介绍一些学习这三个排序方法的比较好的资料。冒泡排序看《学习JavaScript数据结构与算法》介绍的冒泡排序,选择排序看《计算机科学概论(第三版)》里介绍的选择排序,插入排序看《计算机科学概论(第11版)》里介绍的插入排序,

通过这三份资料弄明白实现原理之后,最后看《学习JavaScript数据结构与算法》一书里的JS实现代码。

  嗯,《学习JavaScript数据结构与算法》这本书里都有现成代码,是用ES5写的,就不在这儿写了,关键是弄清楚原理,然后JS代码每天写两遍,就OK了。

  我在这儿用ES6来写一下。

  冒泡排序:

    var bubbleSort = arr => {
        let length = arr.length;
        for (let i = 0; i < length; i++) {
            for (let j = 0; j < length-1-i; j++) {
                if (arr[j] > arr[j+1]) {
                    [arr[j], arr[j+1]] = [arr[j+1], arr[j]];
                }
            }
        }
    }

  ES6的解构好酸爽,都不用辅助函数了,几行代码就实现了冒泡排序。验证一下正确性吧。

    var array = [7, 3, 9, 6, 11, 2, 4, 5];
    var bubbleSort = arr => {
        let length = arr.length;
        for (let i = 0; i < length; i++) {
            for (let j = 0; j < length-1-i; j++) {
                if (arr[j] > arr[j+1]) {
                    [arr[j], arr[j+1]] = [arr[j+1], arr[j]];
                }
            }
        }
    }

    bubbleSort(array);
    console.log(array);

  OK,chrome浏览器没问题,接下来用ES6实现选择排序。

  选择排序:

    var selectSort = arr => {
        let length = arr.length,
            indexMin;
        for (var i = 0; i < length - 1; i++) {
            indexMin = i;
            for (var j = i; j < length; j++) {
                if (arr[j] < arr[indexMin]) {
                    indexMin = j;
                }
            }
            if (i !== indexMin) {
                [arr[i], arr[indexMin]] = [arr[indexMin], arr[i]];
            }
        }
    }

  验证过程与冒泡排序一样,就不在这儿写了。下面实现最后一个插入排序。

  插入排序:

    var insertSort = arr => {
        let length = arr.length,
            j, temp;
        for (var i = 1; i < length; i++) {
            j = i;
            temp = arr[i];
            while (j > 0 && arr[j-1] > temp) {
                arr[j] = arr[j-1];
                j--;
            }
            arr[j] = temp;
        }
    };

  验证过程与冒泡排序一样。OK,三个速度较慢的排序算法完成了,下次写速度快的排序算法,也是各大浏览器实现sort时用的算法。

  说好用ES6语法,我怎么忘记了箭头函数,赶紧补上。。。今后业务代码里,要强迫自己使用箭头函数,不然怎么提升自己呢。

JavaScript算法(冒泡排序、选择排序与插入排序)的更多相关文章

  1. lowB三人组算法-冒泡排序-选择排序-插入排序

    冒泡排序 时间复杂度:O(n2)  算法稳定 第一趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到最后位置得出一个第一大数 第二趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到倒数 ...

  2. php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序

    <?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){    $num=count($arr);    ...

  3. Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析

    前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...

  4. 算法 排序lowB三人组 冒泡排序 选择排序 插入排序

    参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...

  5. javascript的冒泡排序, 快速排序, 选择排序, 插入排序

    冒泡排序, 最经典的排序, 把比较大的数字往后放, 和选择排序恰恰相反: <!DOCTYPE html> <html lang="en"> <head ...

  6. java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...

  7. python算法(一)基本知识&冒泡排序&选择排序&插入排序

    本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...

  8. 【排序算法】——冒泡排序、选择排序、插入排序、Shell排序等排序原理及Java实现

    排序 1.定义: 所谓排序,即是整理文件中的内容,使其按照关键字递增或递减的顺序进行排列. 输入:n个记录,n1,n2--,其对应1的关键字为k1,k2-- 输出:n(i1),n(i2)--,使得k( ...

  9. 排序算法总结------选择排序 ---javascript描述

    每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...

随机推荐

  1. react native 多选按钮

    在做项目的时候有一个需求,是可以选择多个条件的,特地在Github上找了一些案例,发现没有什么合适的,于是自己根据这些案例,改装一下,封装了一个合适自己的.先看我封装的代码. import React ...

  2. python学习5 常用三方模块

    watchdog: 监控指定目录/文件的变化并自定义处理事件 例子

  3. time的用法

    线程计时器(System.Threading.Timer) System.Windows.Threading.DispatcherTimer tRecorderTimer; if (tRecorder ...

  4. 【滤波】标量Kalman滤波的过程分析和证明及C实现

    摘要: 标量Kalman滤波的过程分析和证明及C实现,希望能够帮助入门的小白,同时得到各位高手的指教.并不涉及其他Kalman滤波方法. 本文主要参考自<A Introduction to th ...

  5. Linux查看系统运行情况

    http://elinux.org/Runtime_Memory_Measurement

  6. <转>Unity3D研究院之C#使用Socket与HTTP连接服务器传输数据包

    最近项目中需要使用HTTP与Socket,把自己这段时间学习的资料整理一下.有关Socket与HTTP的基础知识MOMO就不赘述拉,不懂得朋友自己谷歌吧.我们项目的需求是在登录的时候使用HTTP请求, ...

  7. 【转】Oracle执行计划解释

    Oracle执行计划解释 一.相关的概念     Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的. 对每个表都有一个rowid的伪列,但是表中并不物 ...

  8. 15分钟学会Lua

    lua的很多语法跟matlab很像 最基本的赋值是一样的 循环和选择判断后面必须跟一个关键字:do和then ,, do ... end if - then - end table是lua的唯一一种数 ...

  9. chm文件索引丢失和不能搜索

    regsvr32 hhctrl.ocx regsvr32 itss.dll regsvr32 itircl.dll

  10. 有状态Bean和无状态Bean的定义

    有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一个初 ...