js算法中的排序、数组去重详细概述

JS算法中的排序、数组去重详细概述

排序算法

在JavaScript中,常用的排序算法有冒泡排序、插入排序、选择排序、快速排序等。下面将分别对他们进行介绍。

冒泡排序

冒泡排序是一种稳定的排序算法,它的基本思想是从左到右依次比较相邻两个元素的大小,并且将较大的元素向右移动,较小的元素向左移动。重复这个过程直到没有任何元素需要移动为止。

下面是冒泡排序的JavaScript代码实现:

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

插入排序

插入排序是一种稳定的排序算法,它的基本思想是每次将一个待排序的元素插入到已排好序的序列中的适当位置中。

下面是插入排序的JavaScript代码实现:

function insertionSort(arr) {
  for (let i = 1, len = arr.length; i < len; i++) {
    let j = i - 1;
    let tmp = arr[i];
    while (j >= 0 && arr[j] > tmp) {
      arr[j + 1] = arr[j];
      j--;
    }
    arr[j + 1] = tmp;
  }
  return arr;
}

选择排序

选择排序是一种不稳定的排序算法,它的基本思想是每次从待排序序列中选择一个最小(或最大)的元素,然后把它移到序列的最前面。

下面是选择排序的JavaScript代码实现:

function selectionSort(arr) {
  for (let i = 0, len = arr.length; i < len - 1; i++) {
    let minIndex = i;
    for (let j = i + 1; j < len; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j;
      }
    }
    if (i !== minIndex) {
      [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
    }
  }
  return arr;
}

快速排序

快速排序是一种不稳定的排序算法,它的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

下面是快速排序的JavaScript代码实现:

function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  const pivotIndex = Math.floor(arr.length / 2);
  const pivot = arr.splice(pivotIndex, 1)[0];
  const left = [];
  const right = [];
  for (let i = 0, len = arr.length; i < len; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
}

数组去重算法

在JavaScript中,常用的数组去重算法有利用Set、利用for循环的双重遍历、利用indexOf、利用Map等。下面将分别对他们进行介绍。

利用Set实现数组去重

Set是ES6新增的一种数据结构,它类似于数组,但是它的成员是唯一的,这就可以很方便的实现对数组的去重。

下面是利用Set实现数组去重的JavaScript代码:

function unique(arr) {
  return [...new Set(arr)];
}

利用for循环的双重遍历实现数组去重

在for循环内部再嵌套一个for循环,用来和外部的循环进行比较,如果发现有相同的元素,则删除掉内部循环的元素。

下面是利用for循环的双重遍历实现数组去重的JavaScript代码:

function unique(arr) {
  for (let i = 0, len = arr.length; i < len - 1; i++) {
    for (let j = i + 1; j < len; j++) {
      if (arr[i] === arr[j]) {
        arr.splice(j, 1);
        len--;
        j--;
      }
    }
  }
  return arr;
}

利用indexOf实现数组去重

使用indexOf方法来查找元素在数组中的位置,如果能够找到,则说明数组中已经存在该元素,需要删除掉。

下面是利用indexOf实现数组去重的JavaScript代码:

function unique(arr) {
  let res = [];
  for (let i = 0, len = arr.length; i < len; i++) {
    if (res.indexOf(arr[i]) === -1) {
      res.push(arr[i]);
    }
  }
  return res;
}

利用Map实现数组去重

利用Map来判断数组中是否有重复元素,如果没有,则将该元素添加到Map中。

下面是利用Map实现数组去重的JavaScript代码:

function unique(arr) {
  let res = [];
  let map = new Map();
  for (let i = 0, len = arr.length; i < len; i++) {
    if (!map.has(arr[i])) {
      map.set(arr[i], true);
      res.push(arr[i]);
    }
  }
  return res;
}

示例说明

示例一:排序算法

我们定义一个数组arr,里面存放着10个无序的整数,现在我们想要将它们进行排序。我们可以使用快速排序这种算法来实现。下面是代码示例:

let arr = [4, 9, 2, 10, 1, 5, 3, 6, 8, 7];
console.log(quickSort(arr));

通过执行这段代码,我们就可以得到一个有序的数组。

示例二:数组去重算法

我们定义一个数组arr,里面存放着一些重复的元素,现在我们想要将它们去重。我们可以使用利用Set来实现数组去重的方法。下面是代码示例:

let arr = [1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 9, 9];
console.log(unique(arr));

通过执行这段代码,我们就可以得到一个去重后的数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js算法中的排序、数组去重详细概述 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • php数组冒泡排序算法实例

    让我们来详细讲解一下“PHP 数组冒泡排序算法实例”。 什么是冒泡排序? 冒泡排序算法是一种基于比较的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,如果它们的顺序错误,就将它们交换位置。这个过程直接比较相邻元素,每一轮都将最小的元素放到序列的开头,就像气泡不断上升一样,因此得名冒泡排序。 基本的冒泡排序实现方法 下面是一个基本的实现方法,用 PHP…

    算法与数据结构 2023年5月19日
    00
  • 常用的C语言排序算法(两种)

    常用的C语言排序算法(两种) 排序算法是计算机程序员经常用到的算法,在实际的开发中排序算法往往可以提升程序的效率。在C语言中常用的排序算法有很多种,其中比较常见的包括快速排序和冒泡排序两种。 快速排序 快速排序(Quick Sort)是一种分而治之的思想,它通过在数据集合中挑选一个基准数,将数据集合分成两部分,一部分大于基准数,一部分小于基准数,然后对这两部…

    算法与数据结构 2023年5月19日
    00
  • php排序算法(冒泡排序,快速排序)

    PHP排序算法是常见的编程问题,其中冒泡排序和快速排序是两种常见的算法。下面我会详细讲解这两种算法的原理和实现方法。 冒泡排序 冒泡排序是一种基本的排序算法,其原理是反复遍历要排序的元素,比较相邻元素的大小,若顺序不对则交换位置,一直重复该过程直到所有元素都按照升序排好。 冒泡排序的实现过程可以分为两个步骤: 外层循环控制排序的趟数,循环次数为 $n-1$ …

    算法与数据结构 2023年5月19日
    00
  • JavaScript中的排序算法代码

    JavaScript中的排序算法是基于不同的算法实现的,主要包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。下面我们会分别讲解这些算法的具体实现过程,其中包括每个算法的时间复杂度、空间复杂度、优缺点以及关键代码实现。 冒泡排序 冒泡排序是一种交换排序算法,其基本思想是重复地从序列中比较相邻的两个元素,一遍遍地交换相邻逆序的元素。在一趟排序中如果没有进…

    算法与数据结构 2023年5月19日
    00
  • CSS规则层叠时的优先级算法

    当多个CSS规则(指选择器和声明的组合)作用于同一元素时,就会遇到规则层叠的问题,也就是优先级的问题。CSS规则层叠时的优先级算法主要分为以下4个级别: 元素样式或行内样式(Inline Style):元素样式指的是通过HTML元素的style属性定义的样式,行内样式(如在CSS中使用选择器设置)也具有同等优先级; ID选择器(ID Selector):指通…

    算法与数据结构 2023年5月19日
    00
  • PHP常见数组排序方法小结

    PHP常见数组排序方法小结 PHP的数组是一种非常有用的数据结构。当我们需要对数组进行排序时,PHP提供了许多常见的排序方法,包括冒泡排序、选择排序、插入排序、快速排序等,本文将对这些排序方法进行简要介绍和示例说明。 冒泡排序 冒泡排序是一种常见的排序方法,它的基本思想是:对相邻的元素进行比较,如果顺序不正确就交换。这个过程会持续到整个数组都有序为止。 fu…

    算法与数据结构 2023年5月19日
    00
  • C语言中数组排序浅析

    C语言中数组排序浅析 前言 在C语言中,数组排序是一项非常基础且实用的技能。它可以帮助我们将一个未排序的数组变为有序的,这样方便我们进行各种操作,比如查找、去重、统计频率等等。在本文中,我们将浅析C语言中数组排序的几种方法以及它们的优缺点。 冒泡排序 冒泡排序是一种比较简单易懂的排序方法,在很多初学者的教程中都有涉及。该算法的基本思想是将相邻的元素比较,如果…

    算法与数据结构 2023年5月19日
    00
  • 又一个PHP实现的冒泡排序算法分享

    下面我将详细讲解一下“又一个PHP实现的冒泡排序算法分享”的完整攻略。 前言 冒泡排序是一种简单直观的排序方法,它重复地走访过要排序的数列,每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。 原理 冒泡排序的原理主要包括以下两个步骤: 比较相邻的元素,如果第一个比第二个大,就交换它们两个; 对每一对相邻元素重复执行步骤 1,直到最后一对元素。这样做…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部