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

yizhihongxing

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日

相关文章

  • Java 直接插入排序的三种实现

    Java 直接插入排序的三种实现 本文将介绍 Java 中直接插入排序的三种实现方式,分别为插入排序、希尔排序和折半插入排序。 插入排序 插入排序是一种简单直观的排序算法,其基本思想是将一个待排序的元素插入到已排好序列中的适当位置。 以下是 Java 中插入排序的实现代码: public static void insertSort(int[] arr) {…

    算法与数据结构 2023年5月19日
    00
  • 深入理解JS实现快速排序和去重

    深入理解JS实现快速排序和去重 1.快速排序 快速排序是一种快速并且高效的排序算法。下面是快速排序的步骤: 选择数组中的中心元素作为基准点(pivot) 将所有小于基准点的元素移到基准点的左侧,所有大于基准点的元素移到基准点的右侧 对左右两个子数组递归执行步骤1和步骤2,直到子数组长度为1或0 快速排序可以用以下的JavaScript代码来实现: funct…

    算法与数据结构 2023年5月19日
    00
  • 合并排序(C语言实现)

    合并排序(C语言实现) 合并排序是一种将待排序序列分成多个子序列,分别进行排序,然后再将排序后的子序列合并成整体有序序列的排序算法。使用递归实现时,该算法的时间复杂度为O(nlogn),因此被广泛应用。 实现步骤 合并排序可以用以下步骤来实现: 分治:将待排序序列从中间分成两部分,递归地对左右两部分进行排序。 合并:将两个有序子序列合并成一个有序序列。 在实…

    算法与数据结构 2023年5月19日
    00
  • C语言每日练习之选择排序

    C语言每日练习之选择排序 选择排序算法简介 选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思路是在未排序的数列中,从前往后依次选择最小的数,和第一个数进行交换,然后在剩余的数列中从前往后选择最小的数,与第二个数进行交换,直到选择到最后一个数为止。 选择排序的时间复杂度为O(n²),属于较慢的排序算法,但是它的实现简单易懂,不需要额…

    算法与数据结构 2023年5月19日
    00
  • Python实现的最近最少使用算法

    Python实现最近最少使用算法 最近最少使用算法(Least Recently Used,LRU)是一种缓存淘汰策略,用于在缓存已满时选择要被淘汰的缓存块。该算法的基本思想是,当缓存已满时,淘汰最近最少使用的缓存块。 下面我们将通过python代码实现LRU算法的主要思想,并提供两个示例说明。 算法思路 LRU算法需要同时维护两个数据结构。 记录最近访问顺…

    算法与数据结构 2023年5月19日
    00
  • C语言排序算法之插入排序

    让我来详细讲解一下“C语言排序算法之插入排序”的完整攻略。 什么是插入排序? 插入排序是一种简单的排序算法,其原理是将一个数组分为两个部分,已排序和未排序。通过一次次取出未排序部分的首位元素,插入到已排序部分中正确的位置,最终实现整个数组的排序。 插入排序算法的步骤 插入排序的具体步骤如下: 将待排序数组分成已排序和未排序两个部分,第一个元素默认为已排序部分…

    算法与数据结构 2023年5月19日
    00
  • JS中的算法与数据结构之字典(Dictionary)实例详解

    下面我将详细讲解“JS中的算法与数据结构之字典(Dictionary)实例详解”的完整攻略。 什么是字典? 字典是一种存储唯一键和对应值的数据结构,每个键对应一个值。JavaScript 中的对象就是字典的一种实现,通过键值对来存储和访问数据。 字典的操作 字典支持以下几种操作: 添加键值对 删除键值对 查找键值对 获取所有键 获取所有值 字典的实现 下面是…

    算法与数据结构 2023年5月19日
    00
  • Go语言展现快速排序算法全过程的思路及代码示例

    这里是关于“Go语言展现快速排序算法全过程的思路及代码示例”的详细攻略。 什么是快速排序算法 快速排序算法是一种基于比较的排序算法,它通过选择一个基准元素,将数组分为两部分然后递归地对这两部分进行排序,最终完成对整个数组的排序。快速排序算法的时间复杂度为 O(nlogn) 平均情况下,但是在最坏情况下会退化为 O(n^2)。 快速排序算法的实现思路 下面是快…

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