如何理解JavaScript中常用的4种排序算法?

冒泡排序

冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习。

算法介绍:

  • 比较相邻的两个元素,如果前一个比后一个大,则交换位置。
  • 第一轮把最大的元素放到了最后面。
  • 由于每次排序最后一个都是最大的,所以之后按照步骤1排序最后一个元素不用比较。

冒泡算法改进:

设置一个标志,如果这一趟发生了交换,则为true。否则为false。如果这一趟没有发生交换,则说明排序已经完成。代码如下:

假如数组长度是20,如果只有前十位是无序排列的,后十位是有序且都大于前十位,所以第一趟遍历排序的时候发生交换的位置必定小于10,且该位置之后的必定有序,我们只需要排序好该位置之前的就可以,因此我们要来标记这个位置就可以了,即可以记录每次扫描中最后一次交换的位置,下次扫描的时候只要扫描到上次的最后交换位置就行了,因为后面的都是已经排好序的,无需再比较,代码如下:

每一次循环从两头出发算出最大和最小值,代码如下:

在代码3的基础上记录每次扫描最后一次交换的位置,下次扫描的时候只要扫描到上次的最后交换位置就行,同代码2,代码如下:

冒泡排序动图演示:

快速排序

算法介绍:

快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。

快速排序动图演示:

选择排序

算法介绍:

选择排序就是从一个未知数据空间里,选取之最放到一个新的空间

选择排序动图演示:

插入排序

算法介绍:

  • 从第一个默认被排好序的元素开始
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描
  • 如果已排序的元素大于取出的元素,则将其分别向后移动一位
  • 直到找到已排序的元素中小于或等于取出的元素,将取出的元素放到它的后一位
  • 重复步骤2

插入排序算法改进-二分法插入排序:

插入排序法动图演示:

以上就是4中比较基础的排序方法了,JavaScript的排序算法还有很多,这是我们4种最常见也是最基本的算法,掌握理解好,在面试和开发中也能从容应对了。

 
转发

@WEB开发李家靖

如何理解JavaScript中常用的4种排序算法?

0/2000字

 

如何理解JavaScript中常用的4种排序算法?的更多相关文章

  1. Java中常用的6种排序算法详细分解

    排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...

  2. 请写出JavaScript中常用的三种事件。

    请写出JavaScript中常用的三种事件. 解答: onclick,onblur,onChange

  3. java算法03 - 常用的8种排序算法

    Java常用的八种排序算法: 插入排序 - 直接插入排序 每次将待排序的记录按照关键字的大小,插入到前面已经排好序的记录的适当位置.直到全部记录插入完成. 代码实现 /** * 直接插入排序 O(n^ ...

  4. 学习Java绝对要懂的,Java编程中最常用的几种排序算法!

    今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来!     ,群里有免费的学习视频和项目给大家练手.大神有空时也 ...

  5. JavaScript中常用的几种类型检测方法

    javascript中类型检测方法有很多: typeof instanceof Object.prototype.toString constructor duck type 1.typeof 最常见 ...

  6. 对比几种在ROS中常用的几种SLAM算法

    在此因为要总结写一个文档,所以查阅资料,将总结的内容记录下来,欢迎大家指正! 文章将介绍使用的基于机器人操作系统(ROS)框架工作的SLAM算法. 在ROS中提供的五种基于2D激光的SLAM算法分别是 ...

  7. 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版

    每次开始动手写算法,都是先把插入排序,冒泡排序写一遍,十次有九次是重复的,所以这次下定决心,将所有常规的排序算法写了一遍,以便日后熟悉. 以下代码总用一个main函数和一个自定义的CommonFunc ...

  8. Objective-C实现常用的4种排序算法

    OC实现的4种排序又来了! 4种排序分别是:快速排序.冒泡排序.选择排序.插入排序,其他的我就不写了,因为OC里的数组中不能存放基本数据类型,如int不能存放,只能放对象,所以所有的数据我用了NSNu ...

  9. JavaScript中数组的两种排序方法详解(冒泡排序和选择排序)

    一.冒泡排序的原理(从小到大) 相邻两个数进行比较,如果前一个数大于后一个数,那么就交换,否则不交换 原理剖析 比如有一组含有6个数字的数:5.3.7.2.1.6一共6个数字,做5次循环,每次循环相邻 ...

  10. Java常用的八种排序算法与代码实现

    1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直 ...

随机推荐

  1. 智能指针 shared_ptr weak_ptr shared_from_this 笔记

    shared_ptr 当指向对象的std::shared_ptr一创建,被管理对象的控制块SharedPtrControlBlock(参考下面的图)就建立了. 被管理的对象的控制块中有引用计数(ref ...

  2. wps二次开发

    JSAPI概述及原理 : [金山文档]JSAPI概述及原理 https://kdocs.cn/l/skWT29577eEE JSAPI集成开发文档 [金山文档]JSAPI集成开发文档 https:// ...

  3. ROS1 Qt5 CMake基本配置

    ############################################################################## # CMake ############# ...

  4. 从Encoder-Decoder(Seq2Seq)理解Attention的本质

    0. 目录 1. 前言 2. Transformer模型结构 2.1 Transformer的编码器解码器 2.2 输入层 2.3 位置向量 2.4 Attention模型 3. 总结 1. 语言模型 ...

  5. 【剑指Offer】【树】二叉搜索树的后序遍历序列

    题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. A:在二叉树的后序遍历中,数组最后一个元素为根节点,左 ...

  6. Notepad++来比较文件

    使用Notepad++来比较文件_sanqima的专栏-CSDN博客_notepad比较文件https://blog.csdn.net/sanqima/article/details/50467154

  7. 你不能只会flex居中布局,精制动画讲解所有flex布局方式!通俗易懂纯干货教程!...

    flex布局相信很多人都已经有不少了解,其优势和作用被越来越多的开发者所喜爱,网上也有很多关于关于flex的介绍和教程.但是根据笔者的面试经验发现,很多人尤其是初中级开发者对flex布局都仅仅停留下c ...

  8. vue3 h函数

    1. 自定义指令(withDirectives 仅可在setup或render函数中使用)可以使用 withDirectives 将自定义指令应用于 VNode: const { h, resolve ...

  9. cisco的telnet远程登入

    Cisco配置telnet登入 拓扑图: IP地址表: 设备 IP地址 PC0 192.168.1.1 Switch0 vlan1:192.168.1.254 1.不需要用户的telnet登入 Swi ...

  10. docker、Containerd ctr、crictl 区别

    简述 作为接替 Docker 运行时的 Containerd 在早在 Kubernetes1.7 时就能直接与 Kubelet 集成使用,只是大部分时候我们因熟悉 Docker,在部署集群时采用了默认 ...