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

  介绍一些学习这三个排序方法的比较好的资料。冒泡排序看《学习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. supervisor-3:xml_rpc

    别人博客转载,做个记录 原文链接:http://lixcto.blog.51cto.com/4834175/1540795 supervisor提供的两种管理方式,supervisorctl和web其 ...

  2. 浩瀚科技 定制现场无线手持打印PDA手持终端扫描条码开单解决方案

    PDA通过扫描商品条码移动开单,实现便携式办公,伴随式销售,是深圳市浩瀚技术有限公司的一款最新安卓微POS产品,PDA能通过WIFI无线局域网.GPRS互联网直接与主机电脑连接,让公司业务人员能随时随 ...

  3. Linux查看系统运行情况

    http://elinux.org/Runtime_Memory_Measurement

  4. Codeforces CF#628 Education 8 B. New Skateboard

    B. New Skateboard time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  5. 通过url传参

    简介: 通过url传单个和多个参数 你得配Route; 你得使用ui-sref传参数; 在你相关Route的Controller里面Inject $stateParams,然后取参数就OK. 实例: ...

  6. 使EditText不要在页面打开时自动获取焦点(因为软键盘会自动弹出)

    当页面上有EditText时,第一个EditText会在页面打开时自动的获取焦点,这样带来的问题就是系统键盘会自动的弹出来. 解决方法比较简单只要为EditText的父控件设置一下就行了: andro ...

  7. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  8. 欢迎进入MyKTV前后台点歌系统展示

    一个项目,一分收获:一个项目,一些资源.Ktv项目也是一样的,所以我想分享我的收获,让你们获得你需要的资源. 一. 那MyKTV点歌系统具体的功能有哪些呢?我们就来看看吧! 1.MyKTV前台功能: ...

  9. 《Linux内核设计与实现》读书笔记 第三章 进程管理

    第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...

  10. MVC学习二:基础语法

    目录 一:重载方法的调用 二:数据的传递 三:生成控件 四:显示加载视图 五:强类型视图 六:@Response.Write() 和 @Html.Raw()区别 七:视图中字符串的输入 八:模板页 一 ...