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日

相关文章

  • C#算法之全排列递归算法实例讲解

    C#算法之全排列递归算法实例讲解 什么是全排列? 全排列是指将一个给定的集合中的元素进行排列,使得每个元素只出现一次,且每个元素在排列中的位置是不确定的,从而得到的所有不同排列。比如给定集合{1, 2, 3}的全排列包括{1, 2, 3}、{1, 3, 2}、{2, 1, 3}、{2, 3, 1}、{3, 1, 2}和{3, 2, 1}。 递归算法实现全排列…

    算法与数据结构 2023年5月19日
    00
  • 可能是你看过最全的十大排序算法详解(完整版代码)

    针对“可能是你看过最全的十大排序算法详解(完整版代码)”这篇文章,下面是详细的攻略: 标题 首先,该文章的标题是:可能是你看过最全的十大排序算法详解(完整版代码) 文章简介 其次,在文章简介中,作者提到该篇文章是一个完整介绍了十大排序算法并且附有代码实现的文章,可以帮助读者了解这些排序算法的原理和代码实现。 内容 文章的主体部分是对十大排序算法进行详细的讲解…

    算法与数据结构 2023年5月19日
    00
  • PHP 各种排序算法实现代码

    下面我将详细讲解“PHP 各种排序算法实现代码”的完整攻略。 简介 排序算法是计算机科学最常用的算法之一,它可以将一组数据按照特定的排序规则进行排序。在实际的开发中,我们经常需要对数据进行排序,比如搜索引擎对搜索结果页的排序,电商网站对商品列表页的排序等。 目前常见的排序算法有插入排序、选择排序、希尔排序、归并排序、快速排序、堆排序等。下面我们将会分别介绍这…

    算法与数据结构 2023年5月19日
    00
  • JS排序之冒泡排序详解

    JS排序之冒泡排序详解 简介 冒泡排序是最基本,也是最容易实现的排序算法之一。它的基本思想是通过多次循环遍历数组,每次比较相邻两个元素的大小,如果发现顺序不对,就交换它们的位置,通过多次遍历和交换的操作,最终使得整个数组变得有序。 基本思路 遍历数组,将相邻元素的大小进行比较,如果前面元素大于后面元素,则交换它们的位置; 继续以相同的方式遍历数组,直到数组中…

    算法与数据结构 2023年5月19日
    00
  • C语言实现桶排序的方法示例

    C语言实现桶排序的方法示例 桶排序是一种非常高效的排序算法,它的基本思想是将要排序的数据分到几个有序的桶中,每个桶内部再完成排序,最终按照桶的顺序依次连接起来。在本文中,我们将详细讲解如何使用C语言实现桶排序,并提供两个示例来帮助读者更好地理解它的实现过程。 实现步骤 桶排序的实现过程主要分为以下几个步骤: 创建桶:根据待排序数组的最大值和最小值,确定需要创…

    算法与数据结构 2023年5月19日
    00
  • GO语言中常见的排序算法使用示例

    首先感谢你对“GO语言中常见的排序算法使用示例”的关注,下面是一个完整的攻略: GO语言中常见的排序算法 在GO语言中,常见的排序算法包括:冒泡排序、插入排序、选择排序、希尔排序、归并排序、快速排序、堆排序等。这些排序算法的具体实现方式有所不同,但都可以在GO语言的标准库中找到相应的方法。 冒泡排序 冒泡排序的基本思路是比较相邻的两个元素,如果它们的顺序错误…

    算法与数据结构 2023年5月19日
    00
  • JavaScript算法学习之冒泡排序和选择排序

    JavaScript算法学习之冒泡排序和选择排序 冒泡排序和选择排序是常见的两种排序算法。在本文中,我们将详细讲解这两种排序算法,并提供代码示例供读者参考。 冒泡排序 冒泡排序是一种简单的排序算法,它通过比较相邻两个元素的大小,依次将最大的元素冒泡到数组的末尾。 以下是冒泡排序的代码示例: function bubbleSort(array) { const…

    算法与数据结构 2023年5月19日
    00
  • 快速排序算法在Swift编程中的几种代码实现示例

    让我为您详细讲解“快速排序算法在Swift编程中的几种代码实现示例”的完整攻略。 快速排序算法简介 快速排序是一种常用的排序算法,其基本思想是通过一个枢轴(pivot)将待排序数组分成两个部分,一部分小于枢轴,一部分大于枢轴,然后对这两个部分进行递归排序,最终得到一个有序的数组。 快速排序算法实现 下面是三种在Swift编程中实现快速排序算法的代码示例。 代…

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