JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

JS数组排序技巧汇总

在 Javascript 中,排序操作是非常常见的操作。本篇文章将会介绍常见的几种排序算法:冒泡排序、选择排序、插入排序、快速排序和希尔排序。同时,我们也会讲解如何使用这些算法在 Javascript 中进行排序。

冒泡排序

冒泡排序是最基础的算法之一,也是最容易理解的算法之一。它通过依次比较相邻的两个元素,把大的元素往后排,小的元素往前排。

以下是一个使用冒泡排序进行升序排序的例子:

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

const arr = [5, 4, 3, 2, 1];
console.log(bubbleSort(arr)); // [1, 2, 3, 4, 5]

选择排序

选择排序是另一种基础的排序算法,它通过不断选择最小的元素,来实现排序。

以下是一个使用选择排序进行升序排序的例子:

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

const arr = [5, 4, 3, 2, 1];
console.log(selectionSort(arr)); // [1, 2, 3, 4, 5]

插入排序

插入排序是一种简单直观的排序算法,它的思路是将未排序序列中的元素插入到已排序序列的合适位置。

以下是一个使用插入排序进行升序排序的例子:

function insertSort(arr) {
  var len = arr.length;
  for (var i = 1; i < len; i++) {
    var temp = arr[i];
    var j = i - 1;
    while (j >= 0 && arr[j] > temp) {
      arr[j + 1] = arr[j];
      j--;
    }
    arr[j + 1] = temp;
  }
  return arr;
}

const arr = [5, 4, 3, 2, 1];
console.log(insertSort(arr)); // [1, 2, 3, 4, 5]

快速排序

快速排序是常见的排序算法之一,它通过递归调用自身来实现分治的思想,将大问题分解成小问题,以此解决大问题。

以下是一个使用快速排序进行升序排序的例子:

function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }

  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];

  for (var 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));
}

const arr = [5, 4, 3, 2, 1];
console.log(quickSort(arr)); // [1, 2, 3, 4, 5]

希尔排序

希尔排序是插入排序的一种改进,它通过定义一个增量序列来将列表分成多个子序列进行排序,最终合并成完整的有序序列。

以下是一个使用希尔排序进行升序排序的例子:

function shellSort(arr) {
  var len = arr.length;
  var gap = Math.floor(len / 2);
  while (gap > 0) {
    for (var i = gap; i < len; i++) {
      var temp = arr[i];
      var j = i - gap;
      while (j >= 0 && arr[j] > temp) {
        arr[j + gap] = arr[j];
        j -= gap;
      }
      arr[j + gap] = temp;
    }
    gap = Math.floor(gap / 2);
  }
  return arr;
}

const arr = [5, 4, 3, 2, 1];
console.log(shellSort(arr)); // [1, 2, 3, 4, 5]

以上是几个常见的排序算法,它们各有优缺点,在实际开发中需要根据具体情况选择使用哪种算法来进行排序操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序) - Python技术站

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

相关文章

  • JavaScript箭头函数中的this详解

    标题:JavaScript箭头函数中的this详解 在JavaScript中,this是一个非常重要的关键字,它表示当前上下文中的对象。然而,在箭头函数中,this却和常规的函数有所不同,它的指向更有一些特别之处。下面我们将对JavaScript箭头函数中的this进行详细讲解。 正常函数中的this 在正常函数中,this的指向是根据函数的调用方式来决定的…

    JavaScript 2023年6月10日
    00
  • javascript实现抽奖程序的简单实例

    让我详细讲解一下“javascript实现抽奖程序的简单实例”的攻略。 确定功能和需求 在开发抽奖程序之前,我们需要确认程序的功能和需求。根据通常的抽奖程序,我们需要确定以下的功能和需求: 可以设置抽奖人员名单 可以设置中奖人数 可以执行抽奖操作,随机选取中奖人员 可以重置程序,清空上次的中奖名单 HTML结构的构建 在确定功能和需求之后,我们需要构建HTM…

    JavaScript 2023年5月27日
    00
  • 10个最受欢迎的 JavaScript框架(推荐)

    10个最受欢迎的 JavaScript框架(推荐)攻略 1. 什么是JavaScript框架? JavaScript框架是一种将一些较为复杂的任务给封装在一起,并提供一些便利性的工具的集合。JavaScript框架有很多,而每个框架都有自己独特的特性,可以根据项目需要进行选择。 2. 为什么需要用JavaScript框架? JavaScript框架有很多功能…

    JavaScript 2023年5月18日
    00
  • JS判断字符串字节数并截取长度的方法

    下面我将详细讲解JS如何判断字符串字节数并截取长度的方法,包括以下几个步骤: 步骤一:获取字符串的字节数 在JS中,一个字符串的字节数并不是它的长度,而是它所占用的字节数,因为JS中的所有字符串都是基于Unicode编码的。因此,我们需要使用一个辅助函数来计算字符串的字节数。下面是一个简单的实现: function getByteLength(str) { …

    JavaScript 2023年5月28日
    00
  • 详解操作cookie的原生方法cookieStore

    下面是详解操作cookie的原生方法cookieStore的完整攻略。 一、什么是cookieStore cookieStore 是浏览器 JavaScript 运行时的一个 API,用来管理浏览器中所有的 cookie,可用于对 cookie 实现增删改查等操作。 二、cookieStore的基本使用方法 cookieStore API 可以使用在浏览器中…

    JavaScript 2023年6月11日
    00
  • 原生js实现复制对象、扩展对象 类似jquery中的extend()方法

    实现复制对象可以使用Object.assign()方法或者扩展运算符(…);实现扩展对象可以自己实现一个extend()方法。 复制对象 使用Object.assign()方法 Object.assign()方法可以将源对象的属性,复制到目标对象中。 语法 Object.assign(target, …sources) 参数 target:目标对象,…

    JavaScript 2023年5月27日
    00
  • jquery 操作DOM案例代码分享

    下面是详细讲解 “jquery 操作 DOM 案例代码分享” 的完整攻略。 简介 在网页设计和开发中,DOM 操作是重要的一环。jQuery 是一个非常流行的 JavaScript 库,它为 DOM 操作提供了简单、快捷的解决方案,尤其适合移动端开发。在本篇文章中,我们将介绍 jQuery 操作 DOM 的一些简单用法和代码示例。同时,我们会通过示例讲解如何…

    JavaScript 2023年6月10日
    00
  • 将字符串转换成gb2312或者utf-8编码的参数(js版)

    要将字符串转换为 GB2312 或 UTF-8 编码的参数,可以通过 JavaScript 中的 encodeURI() 和 encodeURIComponent() 方法来实现,这两个方法的区别在于 encodeURIComponent() 方法会对一些特殊字符进行编码,而 encodeURI() 不会。 具体代码如下所示: let str = &quot…

    JavaScript 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部