JS实现常见的查找、排序、去重算法示例

JS实现常见的查找、排序、去重算法示例

在 JavaScript 中,常见的算法题目也非常多,其中最常见的算法大致可以分为三类,即查找、排序和去重。在这里将对这三个方面中比较常用的算法进行一一解析,以期能够帮助大家更好的理解和掌握这些算法的使用。

一、查找

1. 二分查找

在排序好的数组中查找一个值,如何快速地找到这个值呢?这时候可以使用二分查找算法。它的原理就是先找到数组的中间位置,将待查找值与中间值比较,如果中间值等于待查找值,则查找成功,否则,如果中间值大于待查找值,则继续在低半区间查找,否则,在高半区间查找。不断重复以上步骤,直到找出目标数据。

function binarySearch(arr, target) {
  let low = 0,
      high = arr.length - 1;
  while(low <= high) {
    const mid = Math.floor((low + high) / 2);
    if(arr[mid] === target) {
        return mid;
    } else if(arr[mid] > target) {
        high = mid - 1;
    } else {
        low = mid + 1;
    }
  }
  return -1;
}

2. 线性查找

线性查找的思想是从数组的第一个元素开始,一直到数组的最后一个元素,逐个比较,直到找到目标值或者已经查找了整个数组。因此,它还称为顺序查找。

function linearSearch(arr, target) {
  for(let i = 0; i < arr.length; i++) {
    if(arr[i] === target) {
        return i;
    }
  }
  return -1;
}

二、排序

1. 快速排序

快速排序是一种基于分治的排序算法,它将一个数组分为两个子数组,然后递归地将子数组排序。每次递归将位置在中间的值称为基准值,通过比较其他元素和基准值的大小关系,把小于等于基准值的元素放到基准值的左边,把大于基准值的元素放到基准值的右边,从而达到排序的目的。

function quickSort(arr) {
  if(arr.length <= 1) {
    return arr;
  }
  const pivot = arr[0];
  const left = [];
  const right = [];
  for(let i = 1; i < arr.length; i++) {
    arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
  }
  return quickSort(left).concat([pivot], quickSort(right));
}

2. 冒泡排序

冒泡排序是一种交换排序算法,它的原理就是不断地遍历要排序的元素,每一次遍历都将相邻的两个元素相互比较,如果发现他们两个位置不合适,就将他们交换位置。直到整个数组变得有序。

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

三、去重

1. ES6 Set

ES6 中新增的 Set 类型能够帮助我们轻松地完成数组去重的任务。它是一种无序、不重复元素的集合,通过使用 Set,我们可以将数组转换为 Set,再将 Set 转化为数组,并完成去重的任务。

const arr = [1, 2, 3, 2, 1];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3]

2. 双重循环去重

双重循环的方式是最常见的一种数组去重方法,原理就是使用双重循环,将要去重的数组中的每个元素拿出来依次与其他元素比较,如果找到相同的值,则将该值从数组中去掉。

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

以上就是常见查找、排序、去重算法的实现示例,希望能够对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现常见的查找、排序、去重算法示例 - Python技术站

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

相关文章

  • PHP快速排序quicksort实例详解

    PHP快速排序quicksort实例详解 本文将详细介绍如何使用PHP实现快速排序算法,并提供两个示例进行说明。 基本思路 快速排序是一种比较常见的排序算法,其基本思路是通过递归将待排序数组分割成更小的子数组,并把比基准值小的元素一次放到基准值左边,比基准值大的元素一次放到基准值右边,然后对左右两边分别递归执行上述操作,直到分割成的子数组长度为1,此时由于子…

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

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

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法之快速排序(Quick Sort)及其优化算法详解

    PHP排序算法之快速排序(Quick Sort)及其优化算法详解 快速排序是一种高效的排序算法,也是PHP中常用的排序方法之一。在本攻略中,我们将介绍快速排序的基本思想与原理,以及一些优化算法和实际示例。 快速排序基本原理 快速排序的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部…

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

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

    算法与数据结构 2023年5月19日
    00
  • 利用C++的基本算法实现十个数排序

    利用C++的基本算法实现十个数排序 1. 算法选择 排序问题常见的算法有冒泡排序、插入排序、选择排序、快速排序等,它们的时间复杂度不尽相同,但在本题目的情况下,十个数的排序任何算法都可以。 为了方便,本文将使用最简单的冒泡排序算法。 2. 代码实现 冒泡排序算法的基本思路是从头到尾扫描一遍数组,比较相邻两个元素的大小,如果前一个元素大于后一个元素,则交换它们…

    算法与数据结构 2023年5月19日
    00
  • PHP哈希表实现算法原理解析

    PHP哈希表实现算法原理解析 什么是哈希表 哈希表又称为散列表(Hash Table),是根据关键码值(Key-Value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到 Hash 表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(Hash Function),存放记录的数组叫做哈希表(Hash Table)。 PHP哈希表实现…

    算法与数据结构 2023年5月19日
    00
  • JS栈stack类的实现与使用方法示例

    JS栈Stack类的实现与使用方法示例 一、栈的概念 栈(stack)是一种线性数据结构,它有两个主要操作:入栈(push)和出栈(pop)。栈的特点是先进后出(FILO,First In, Last Out)。从数据结构的角度来说,栈是在同一端进行插入和删除操作的一种数据结构。该端被称为栈顶,相对地,把另一端称为栈底。 在计算机科学中,栈具有非常重要的作用…

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

    JS排序之快速排序详解 快速排序是一种高效的排序算法,它的核心思想是分治。快排的具体步骤如下: 选择一个基准元素,将序列中所有元素和这个基准元素进行比较,将比基准元素小的元素放入左侧序列,将比基准元素大的元素放入右侧序列。 递归地对左右两个子序列进行快速排序,直到每个子序列只有一个元素或者为空。 示例1:将序列[3,1,6,4,8,2,5,7]进行快速排序。…

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