1. 数组排序(上):如何用 JS 实现各种数组排序?

js实现数组排序 一、JavaScript sort() 方法 定义和用法 sort() 方法用于对数组的元素进行排序。 语法 arrayObject.sort(sortby) 参数 描述 sortby 可选。规定排序顺序。必须是函数。 返回值 对数组的引用。请注意,数组在原数组上进行排序,不生成副本。 说明 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比 阅读详情

1. 数组排序(上):如何用 JS 实现各种数组排序?

1.1. 时间复杂度&空间复杂度

在说排序算法之前,你需要重新了解一下时间复杂度和空间复杂度。

关于时间复杂度,我们说的更多的是通过 O(nlogn) 以及 O(n) 等来衡量。其实大多数时候我们对此并未建立形象的认知,到底哪一种算法更快、更好呢?下面是一张时间复杂度的曲线图(来源于 https://gitee.com/webfrontup/javascript-algorithms),方便你来理解。

在这里插入图片描述

图中用颜色区分了最优的、一般的以及比较差的时间复杂度,可以看到有这几种分类:Excellent、Good、Fair、Bad、Horrible,通过这张图可以一目了然。因此你在面试或者日常工作中编写代码的时候,要努力将代码的时间复杂度维持在 O(nlogn) 以下,要知道凡是超过 n 平方的时间复杂度都是难以接受的。

此外,关于哪些循环嵌套是 n 平方,哪些是 nlogn,我想你已经有一定的基础认知了,这里我就不过多讲解了。

空间复杂度比较容易理解,就是对一个算法在运行过程中临时占用存储空间大小的度量。有的算法需要占用的临时工作单元数与解决问题的规模有关,如果规模越大,则占的存储单元越多。比如,归并排序和快速排序的空间复杂度就是不太一样的。

有了这样的前提,我们就来研究各种排序的实现方法吧。

1.1.1. 各种排序的 JS 实现

数据结构算法中排序有很多种,常见的、不常见的,至少包含十种以上。根据它们的特性,可以大致分为两种类型:比较类排序和非比较类排序。

  • 比较类排序:通过比较来决定元素间的相对次序,其时间复杂度不能突破 O(nlogn),因此也称为非线性时间比较类排序。
  • 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。

我们通过一张图片来看看这两种分类方式分别包括哪些排序方法。

在这里插入图片描述

非比较类的排序在实际情况中用的比较少,故本讲主要围绕比较类排序展开讲解。其实根据排序的稳定性,也可以分为稳定排序和不稳定排序,例如快速排序就是不稳定的排序、冒泡排序就是稳定的排序。我在最后总结的部分会帮助你再次区分。

那么我们先从最简单的排序开始吧,先看下冒泡排序。

1.1.1.1. 冒泡排序

冒泡排序是最基础的排序,一般在最开始学习数据结构的时候就会接触它。冒泡排序是一次比较两个元素,如果顺序是错误的就把它们交换过来。走访数列的工作会重复地进行,直到不需要再交换,也就是说该数列已经排序完成。请看下面的代码。

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

算法步骤:

1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

3)针对所有的元素重复以上的步骤,除了最后一个。

4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

在这里插入图片描述

复制代码

var a = [1, 3, 6, 3, 23, 76, 1, 34, 222, 6, 456, 221];
function bubbleSort(array) {
  const len = array.length
  if (len < 2) return array
  for (let i = 0; i < len; i++) {
    for (let j = 0; j < i; j++) {
      if (array[j] > array[i]) {
        const temp = array[j]
        array[j] = array[i]
        array[i] = temp
      }
    }
  }
  return array
}

bubbleSort(a);  // [1, 1, 3, 3, 6, 6, 23, 34, 76, 221, 222, 456]

从上面这段代码可以看出,最后返回的是排好序的结果。因为冒泡排序实在太基础和简单,这里就不过多赘述了。下面我们来看看快速排序法。

1.1.1.2. 快速排序

快速排序的基本思想是通过一趟排序,将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以分别对这两部分记录继续进行排序,以达到整个序列有序。

快 速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法步骤:

1.从数列中挑出一个元素,称为 “基准”(pivot),

2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

在这里插入图片描述

请看下面的代码。

复制代码

var a = [1, 3, 6, 3, 23, 76, 1, 34, 222, 6, 456, 221];

function quickSort(array) {

  var quick = function(arr) {

    if (arr.length <= 1) return arr

    const index = Math.floor(len >> 1)

    const pivot = arr.splice(index, 1)[0]

    const left = []

    const right = []

    for (let i = 0; i < arr.length; i++) {

      if (arr[i] > pivot) {

        right.push(arr[i])

      } else if (arr[i] <= pivot) {

        left.push(arr[i])

      }

    }

    return quick(left).concat([pivot], quick(right))

  }

  const result = quick(array)

  return result

}

quickSort(a);//  [1, 1, 3, 3, 6, 6, 23, 34, 76, 221, 222, 456]

上面的代码在控制台执行之后,也可以得到预期的结果。最主要的思路是从数列中挑出一个元素,称为 “基准”(pivot);然后重新排序数列,所有元素比基准值小的摆放在基准前面、比基准值大的摆在基准的后面;在这个区分搞定之后,该基准就处于数列的中间位置;然后把小于基准值元素的子数列(left)和大于基准值元素的子数列(right)递归地调用 quick 方法排序完成,这就是快排的思路。

下面我们来看看插入排序的实现方式。

1.1.1.3. 插入排序

插入排序算法描述的是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,从而达到排序的效果。来看一下代码。

插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法步骤:

1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

在这里插入图片描述

复制代码

var a = [1, 3, 6, 3, 23, 76, 1, 34, 222, 6, 456, 221];

function insertSort(array) {

  const len = array.length

  let current

  let prev

  for (let i = 1; i < len; i++) {

    current = array[i]

    prev = i - 1

    while (prev >= 0 && array[prev] > current) {

      array[prev + 1] = array[prev]

      prev--

    }

    array[prev + 1] = current

  }

  return array

}

insertSort(a); // [1, 1, 3, 3, 6, 6, 23, 34, 76, 221, 222, 456]

从执行的结果中可以发现,通过插入排序这种方式实现了排序效果。插入排序的思路是基于数组本身进行调整的,首先循环遍历从 i 等于 1 开始,拿到当前的 current 的值,去和前面的值比较,如果前面的大于当前的值,就把前面的值和当前的那个值进行交换,通过这样不断循环达到了排序的目的。

下面说说选择排序的实现方式。

1.1.1.4. 选择排序

选择排序是一种简单直观的排序算法。它的工作原理是,首先将最小的元素存放在序列的起始位置,再从剩余未排序元素中继续寻找最小元素,然后放到已排序的序列后面……以此类推,直到所有元素均排序完毕。请看下面的代码。

选择排序(Selection sort)也是一种简单直观的排序算法。

算法步骤:

1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

2)再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

3)重复第二步,直到所有元素均排序完毕。

在这里插入图片描述

复制代码

var a = [1, 3, 6, 3, 23, 76, 1, 34, 222, 6, 456, 221];

function selectSort(array) {

  const len = array.length

  let temp

  let minIndex

  for (let i = 0; i < len - 1; i++) {

    minIndex = i

    for (let j = i + 1; j < len; j++) {

      if (array[j] <= array[minIndex]) {

        minIndex = j

      }

    }

    temp = array[i]

    array[i] = array[minIndex]

    array[minIndex] = temp

  }

  return array

}

selectSort(a); // [1, 1, 3, 3, 6, 6, 23, 34, 76, 221, 222, 456]

这样,通过选择排序的方法同样也可以实现数组的排序,从上面的代码中可以看出该排序是表现最稳定的排序算法之一,因为无论什么数据进去都是 O(n 平方) 的时间复杂度,所以用到它的时候,数据规模越小越好。

下面我们看看堆排序是怎样实现的。

1.1.1.5. 堆排序

堆排序是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质,即子结点的键值或索引总是小于(或者大于)它的父节点。堆的底层实际上就是一棵完全二叉树,可以用数组实现。

根节点最大的堆叫作大根堆,根节点最小的堆叫作小根堆,你可以根据从大到小排序或者从小到大来排序,分别建立对应的堆就可以。请看下面的代码。

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

堆排序的平均时间复杂度为Ο(nlogn) 。

算法步骤:

1)创建一个堆H[0…n-1]

2)把堆首(最大值)和堆尾互换

3)把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置

4) 重复步骤2,直到堆的尺寸为1

在这里插入图片描述

复制代码

var a = [1, 3, 6, 3, 23, 76, 1, 34, 222, 6, 456, 221];

function heap_sort(arr) {

  var len = arr.length

  var k = 0

  function swap(i, j) {

    var temp = arr[i]

    arr[i] = arr[j]

    arr[j] = temp

  }

  function max_heapify(start, end) {

    var dad = start

    var son = dad * 2 + 1

    if (son >= end) return

    if (son + 1 < end && arr[son] < arr[son + 1]) {

      son++

    }

    if (arr[dad] <= arr[son]) {

      swap(dad, son)

      max_heapify(son, end)

    }

  }

  for (var i = Math.floor(len / 2) - 1; i >= 0; i--) {

    max_heapify(i, len)

  }



  for (var j = len - 1; j > k; j--) {

    swap(0, j)

    max_heapify(0, j)

  }



  return arr

}

heap_sort(a); // [1, 1, 3, 3, 6, 6, 23, 34, 76, 221, 222, 456]

从代码来看,堆排序相比上面几种排序整体上会复杂一些,不太容易理解。不过你应该知道两点:一是堆排序最核心的点就在于排序前先建堆;二是由于堆其实就是完全二叉树,如果父节点的序号为 n,那么叶子节点的序号就分别是 2n 和 2n+1。

你理解了这两点,再看代码就比较好理解了。堆排序最后有两个循环:第一个是处理父节点的顺序;第二个循环则是根据父节点和叶子节点的大小对比,进行堆的调整。通过这两轮循环的调整,最后堆排序完成。

下面我们再来看最后一种归并排序。

1.1.1.6. 归并排序

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。我们先看一下代码。

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

算法步骤:

1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

2.设定两个指针,最初位置分别为两个已经排序序列的起始位置

3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

4.重复步骤3直到某一指针达到序列尾

5.将另一序列剩下的所有元素直接复制到合并序列尾

在这里插入图片描述

复制代码

var a = [1, 3, 6, 3, 23, 76, 1, 34, 222, 6, 456, 221];

function mergeSort(array) {

  const merge = (right, left) => {

    const result = []

    let il = 0

    let ir = 0

    while (il < left.length && ir < right.length) {

      if (left[il] < right[ir]) {

        result.push(left[il++])

      } else {

        result.push(right[ir++])

      }

    }

    while (il < left.length) {

      result.push(left[il++])

    }

    while (ir < right.length) {

      result.push(right[ir++])

    }

    return result

  }

  const mergeSort = array => {

    if (array.length === 1) { return array }

    const mid = Math.floor(array.length / 2)

    const left = array.slice(0, mid)

    const right = array.slice(mid, array.length)

    return merge(mergeSort(left), mergeSort(right))

  }

  return mergeSort(array)

}

mergeSort(a); // [1, 1, 3, 3, 6, 6, 23, 34, 76, 221, 222, 456]

从上面这段代码中可以看到,通过归并排序可以得到想要的结果。上面提到了分治的思路,你可以从 mergeSort 方法中看到,通过 mid 可以把该数组分成左右两个数组,分别对这两个进行递归调用排序方法,最后将两个数组按照顺序归并起来。

归并排序是一种稳定的排序方法,和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好得多,因为始终都是 O(nlogn) 的时间复杂度。而代价是需要额外的内存空间。

以上就是今天要介绍的六种实现数组排序的算法,你有兴趣的话可以自己再学习下非比较类排序的那三种方法。

1.1.2. 总结

我们把平常开发中常见的几种排序方法分别介绍了一遍。我整理了一个表格,汇总了它们各自的时间复杂度和空间复杂度,你可以对比着来回顾一下本讲的内容。

在这里插入图片描述

js中数组排序的方法有哪些 然后剩余的每一轮找到最大(最小)的数,将最大(最小的)元素放在已排序过的元素的后面。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。自述①数组中的每一个元素和它后面的元素依次进行比较,第一轮找到的最大(最小)放在排序序列的。如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。将数组第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。...... 阅读详情

相关推荐

【高级前端进阶】JS10大排序算法实现与总结

高级前端进阶之JS实现10大排序算法

silverclayz的技术分享 1664

js数组排序的六种方法

js数组排序的六种方法

下雨打伞干嘛的博客 5万+

JavaScript实现快速排序(附完整源码)

JavaScript实现快速排序(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 631

js中数组排序的五种方式

1.Javascript的sort方法,本方法的原理是冒泡排序,这里默认从小到大排序 <script> var arr = [23,13,34,65,65,45,89,13,1]; var newArr = arr.sort(function(a,b){ return a - b; }); console.log(newArr);//输出结果 [1, 13, 13, 23, 34, 45, 65, 65, 89] </script> 2. ...

不甜呐的博客 8万+

affymatrix探针转换 | GPL5175探针对应的基因转换

一般情况下,有一些比较成熟的对应平台的注释数据集的R包。但是这个注释平台,我在Bioconductor上找了一圈都没有找到。只能通过最原始也最可靠的方法,从GEO数据集上去下载这部分的注释文件。以下展示全过程。 我要检查的数据平台是:GPL5157。 数据集的注释集链接为:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL5175 这个注释数据集比较难弄的地方在于,它的基因集注释的不太好。没有比较直接的可供提取的genesample的信息;在ge.

weixin_40640700的博客 7124

Latex小白也能搞定!5分钟教你用Overleaf打造个性化简历(附免费模板)

本文为LaTeX新手提供了一份快速上手指南,教你如何在5分钟内使用Overleaf在线平台和现成模板,轻松打造专业且个性化的简历。文章详细介绍了从选择模板、替换个人信息到进行颜色、图标等个性化调整的完整流程,让你无需深入学习LaTeX语法,即可高效制作出排版精美、脱颖而出的求职简历。

2a4s6d8f0g的博客 683

【JavaScript编程实操09】1.实现一个函数,要求传入数组,返回排序之后的数组 2.实现阶乘:5!的结果

本次主要是针对Javascript阶段的函数与对象相关方面的实操练习,共有2个实操,分别是:1.实现一个函数,要求传入数组,返回排序之后的数组 2.实现阶乘:5!的结果大家可以在实操的过程中更加深入地理解函数与对象相关的知识。 前言 1、实现一个函数,要求传入数组,返回排序之后的数组 代码: 实现效果: 2、实现阶乘:5!的结果 代码: 实现效果: 总结

qq_45498824的博客 269

Python对接海康威视机器视觉工业相机

工业相机只允许单条连接,也就是说MVS如果连接了相机,python代码就无法获取数据,此时必须。相机工具类(读者直接复制)HKCamera_class.py。博主这里出现了一个警告:获取不到相机参数。四、使用Pycharm打开Python代码示例文件夹。三、找到MVS示例代码(代码在MVS的安装位置)二、解压并安装MVS客户端。一、下载MVS客户端。安装一下opencv。

Good Luck 2万+

使用JavaScript对数字数组进行排序

所述的JavaScript的Array.sort()方法被用来就地数组元素进行排序,并返回排序后的数组。此函数以字符串格式对元素进行排序。它对字符串数组有效,但对数字无效。例如:如果数字按字符串排序。 例: 输入:[12,25,31,23,75,81,100] 错误的输出:[100、12、23、25、31、75、81] 正确的输出:[12、23、25、31、75、81、100] 示例:本示例以字符串格式对数组元素进行排序。 <script> // Declare and initialize

X W F 1454

nnDetection实战:手把手教你用Python在自家电脑上跑通第一个肺结节检测模型

本文详细介绍了如何使用nnDetection框架在普通电脑上实现肺结节检测模型的搭建与运行。从环境配置、数据预处理到模型训练与推理,手把手教你完成医学图像检测的全流程,特别适合初学者入门医学AI领域。

weixin_32377497的博客 330

【干货】S7-PLCSIM Advanced V3.0 无法启动实例( Error Code:-30,LicenseNotFound)问题解决方法

【干货】S7-PLCSIM Adavanced V3.0 无法启动实例( Error Code:-30,LicenseNotFound)问题解决方法

handinvv的博客 5万+

JS数组排序sort排序数值、对象中属性、日期

JS数组排序sort排序数值、对象中属性、日期

qq_43235503的博客 1004

基于深度学习的灰度图像气泡群识别与优化

灰度图像气泡群深度学习识别优化研究 本研究针对MATLAB实现的深度学习气泡群识别系统在从1445个点到4992个点扩展时出现的精度不稳定问题,提出了一套完整的解决方案。文章首先分析了问题根源,包括数据复杂度增加、类别不平衡、网络容量不足等因素,然后系统性地提出了数据预处理增强、网络架构优化、训练策略调整和后处理算法改进等优化措施。通过改进的U-Net架构、自适应直方图均衡化等技术创新,有效提升了模型在大规模气泡群图像上的识别精度和稳定性,为化工、生物医学等领域的灰度图像分析提供了可靠的技术支持。

max500600的博客 412

JS JavaScript中去除数组中重复元素的方法

JS JavaScript中去除数组中重复元素的方法 感觉比较好理解的3种方法,总结一下,大家共同学习 方法一: Array.prototype.method1 = function(){ var arr=[]; //定义一个临时数组 for(var i = 0; i < this.length; i++){ //循环遍历当前数组 //判断当前数组下标为i的元素是否已经保存到临时数组 //如果已保存,则跳过,否则将此元素保存到临时数组中 if(arr.indexOf(this[i]) ==

qq_33235680的博客 723

智驾车载以太网(18)-switch之报文转发和vlan处理流程

本文详细解析了交换机中报文处理和转发流程:1)通过目标MAC查找转发端口,源MAC创建ARL条目;2)VLAN标签处理包括tagged/untagged帧判断、默认VID标记等5种处理方式;3)完整转发流程包含CRC校验、IQ封装、VLAN和ARL表查询、端口向量计算及优先级队列发送。文中还涉及TCAM修改VLAN、802.1q多种模式处理等细节,省略了流量控制等次要流程。该过程实现了基于MAC和VLAN的高效二层交换。

mitugaoyang1993的博客 43

【通信协议】GATT 与 BLE HID 工作原理详解

详细介绍BLE HID 跟GATT工作原理与两者的交互关系

以实战经验介绍行业知识 843

js实现数组去重怎么实现?

方法1. 创建一个新的临时数组来保存数组中已有的元素 var a = new Array(1,2,2,2,2,5,3,2,9,5,6,3); Array.prototype.unique1 = function(){ var n = []; //一个新的临时数组 for(var i=0; i<this.length; i++){ //如果把...

ahua2800的博客 642

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

js代码实现希尔排序和快速排序

希尔排序 快速排序 JavaScript代码实现

hulover的博客 408

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaScript之排序算法

本文主要介绍三种排序算法,分别是冒泡排序、选择排序和快速排序。为方便测试,本文会随机生成长度为10的数组,数组元素的值在[1,20]之间。1.冒泡排序核心思路:每一轮相邻两个数进行比较,选出一个最大值。(若数组长度为n,则比较轮数为n-1,首轮比较次数为n-1,后续比较次数依次减1.)代码如下: 2.选择排序核心思路:每一轮找出数组元素中的最小值,若最小值不为首个元素,则与首个元素进行交换。(若数组长度为n,则需要找n-1轮,首轮比较次数为n-1,后续比较次数依次减1) 3.快速排序:核心思路(递归

weixin_44827643的博客 307

js面试题---数组的排序方法

数组从小到大排序方法

qq_67452534的博客 211

js如何实现数组随机排序【附洗牌算法心得】

本文主要介绍使用sort方法进行随机排序和利用洗牌算法排序,文末附上推导过程。

接着奏乐接着舞的博客 4994

javascript冒泡排序为数组排序

var arr = [10,8,9,23,-1,2,33]; function sortArr(array) { for(var i = 0, len = arr.length; i < len; i++){ for(var j = i+1; j<len; j++){ var temp = array[i]; if(array[i] > array[j]) {

du_peiduo的专栏 598

JavaScript实现冒泡排序

说明 对数组进行 冒泡排序 算是比较简单的,冒泡排序也是容易理解的一种排序算法了,在面试的时候,很可能就会问到。 实现原理 数组中有 n 个数,比较每相邻两个数,如果前者大于后者,就把两个数交换位置;这样一来,第一轮就可以选出一个最大的数放在最后面;那么经过 n-1(数组的 length - 1) 轮,就完成了所有数的排序。 好的,我们先来实现找数组中的最大数,并把他放到数组最后。 var arr = [3,4,1,2]; // 遍历数组,次数就是arr.length - 1 for (var i = 0;

m0_63760882的博客 402

js中的数组对象排序

一、普通数组排序     js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函数。如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序。如: var arr = ["a", "b", "A", "B"]; arr.sort(); console.log(arr);//["A", "B", "a", "b"] 因为字母A、B的A...

weixin_30888707的博客 949

JavaScript数组内置排序函数

javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组、对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序。 sort() 方法用于对数组的元素进行排序。语法如下: ArrayObject.sort(order); 测试A: var mm=[1,4,0,6,3,1,2]; ...

weixin_30563319的博客 384

排序算法总结JavaScript实现

排序算法总结JavaScript实现 前言: 查找和排序算法是算法的入门知识, 其中的经典思想可以用于很多算法中。排序算法有:冒泡排序、选择排序、快速排序、归并排序、插入排序、堆排序、基数排序、桶排序等。 一。冒泡排序 【稳定、简单】   冒泡排序是最简单的排序之一了,但也是最慢的排序算法之一,其大体思想就是通过与相邻元素...

惠子的博客 242
上一篇: 数组原理(上)
下一篇: Vue的axios拦截器
龟中的程序员
博客等级 码龄7年 328粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龟中的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值