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日

相关文章

  • C++实现广度优先搜索实例

    C++实现广度优先搜索实例攻略 什么是广度优先搜索? 广度优先搜索(Breadth-First Search,也称之为BFS)是一种基于图的搜索算法,用于访问位于某个特定顶点距离为K的所有顶点。它广泛应用于树和图的数据结构中。 BFS的过程如下: 从源节点开始遍历; 访问相邻的节点; 将相邻节点加入队列; 标记已访问的节点; 重复步骤2-4,直到队列为空。 …

    算法与数据结构 2023年5月19日
    00
  • php实现归并排序算法的方法详解

    PHP实现归并排序算法的方法详解 归并排序算法简介 归并排序是一种使用分治法思想的高效稳定排序算法。其基本思想是将待排序的序列拆分成若干个子序列,对每个子序列进行排序,然后将排序后的子序列合并成一个大的有序序列。 归并排序算法的复杂度为O(nlogn),适用于各种数据规模的排序。 归并排序算法步骤 将序列递归拆分成若干个子序列。 对每个子序列进行递归排序。 …

    算法与数据结构 2023年5月19日
    00
  • JS深入学习之数组对象排序操作示例

    《JS深入学习之数组对象排序操作示例》是一篇介绍JavaScript数组排序相关操作的文章,主要包含以下内容: 1. 数组对象排序 1.1 sort()方法 sort()方法是JavaScript中的一个数组排序方法,可以用于对数组的元素进行排序。sort()方法可以接收一个可选的排序函数作为参数,通过这个函数,我们可以实现自定义的排序规则。 语法为:arr…

    算法与数据结构 2023年5月19日
    00
  • go实现冒泡排序算法

    下面是详细讲解Go语言实现冒泡排序算法的完整攻略: 1. 什么是冒泡排序? 冒泡排序是一种基于交换的排序算法,算法通过比较相邻的元素,将比较大的元素交换到后面,从而达到排序的目的。这个过程就像是水中不断上冒的气泡,因此称之为冒泡排序。 冒泡排序是经典的排序算法之一,它虽然时间复杂度高达 O(n^2),但其思想简单,易于理解和实现,并且在某些特殊的情况下,它的…

    算法与数据结构 2023年5月19日
    00
  • TypeScript实现十大排序算法之归并排序示例详解

    TypeScript实现十大排序算法之归并排序示例详解 简介 本文将详细介绍使用 TypeScript 实现归并排序算法的步骤和示例。归并排序是一种非常有效的排序算法,它的时间复杂度为 O(nlogn),在大多数情况下都比快速排序更加稳定和可靠。 步骤 归并排序是一种典型的分治算法,其基本思路是将待排序的数组不断分割为较小的数组,直到每个小数组只有一个元素,…

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

    C语言直接插入排序算法的方法 什么是直接插入排序 直接插入排序,是一种应用最广泛的排序算法之一,也是一种稳定的排序算法。它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的有序表。具体的过程是将待排序的元素插入到已经排好序的元素中,使插入后仍保持有序。 代码实现 下面是用C语言实现直接插入排序算法的代码: void direct_insert…

    算法与数据结构 2023年5月19日
    00
  • JavaScript中几种排序算法的简单实现

    JavaScript中几种排序算法的简单实现 排序算法在计算机科学中是一个基本问题。不同的排序算法具有不同的时间和空间复杂度,选择合适的排序算法可以提高程序的效率。本文介绍了JavaScript中几种排序算法的简单实现,包括冒泡排序、选择排序、插入排序、归并排序和快速排序。 冒泡排序 冒泡排序是最简单的排序算法之一。它重复遍历列表,比较相邻的元素,并交换它们…

    算法与数据结构 2023年5月19日
    00
  • PHP快速排序quicksort实例详解

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

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