javascript实现快速排

javascript实现快速排

快速排序(Quick Sort)是一种常见的排序算法,其核心思想是通过分治的方式逐步缩小待排序的序列范围,从而实现排序。下面我们使用 JavaScript 实现一个快速排序算法。

算法思想

快速排序的算法过程如下:

  1. 选择一个基准元素,将它放在序列的正确位置上;
  2. 将序列分为左右两部分,其中左边部分的元素都小于基准元素,右边部分的元素都大于或等于基准元素;
  3. 递归地对左右两部分执行第 1 步和第 2 步,直到子序列的大小为 1 或 0。

实现过程

下面是使用 JavaScript 实现快排的代码:

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

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

  for (let i = 0; i < array.length; i++) {
    if (array[i] < pivot) {
      left.push(array[i]);
    } else {
      right.push(array[i]);
    }
  }

  return quickSort(left).concat([pivot], quickSort(right));
}

实现过程分为三部分:

  1. 如果数组的长度小于等于 1,那么直接返回该数组,因为长度为 1 或 0 的数组已经是有序的了,无需排序。
  2. 选择一个基准元素 pivot(一般选择中间位置的数),并将其从数组中删除。
  3. 遍历整个数组,将小于 pivot 的元素放入左子数组 left 中,大于等于 pivot 的元素放入右子数组 right 中。然后递归地对左右子数组进行快排,最后将结果数组返回。

测试代码

下面是一个测试函数 quickSortTest,用于验证 quickSort 函数的正确性:

function quickSortTest() {
  const testCases = [
    { input: [], expected: [] },
    { input: [5], expected: [5] },
    { input: [3, 5, 1, 6, 4, 2], expected: [1, 2, 3, 4, 5, 6] },
    { input: [5, 4, 3, 2, 1], expected: [1, 2, 3, 4, 5] },
    { input: [1, 2, 3, 4, 5], expected: [1, 2, 3, 4, 5] },
    { input: [5, 5, 5, 5, 5], expected: [5, 5, 5, 5, 5] },
  ];

  testCases.forEach(({ input, expected }) => {
    const result = quickSort(input);
    console.assert(
      JSON.stringify(result) === JSON.stringify(expected),
      `Failed: input=[${input}], result=[${result}], expected=[${expected}]`
    );
  });

  console.log("All test cases pass");
}

总结

快速排序是一种高效的排序算法,它的时间复杂度为 O(n log n),空间复杂度为 O(log n)。我们使用 JavaScript 实现了快速排序算法,它不仅简单易懂,而且代码量很小,非常适合在实际项目中使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript实现快速排 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • 教你升级到IOS9免开发者账号激活的方法

    教你升级到iOS 9免开发者账号激活的方法 苹果公司在iOS 9推出后,为了防止未经授权的App被安装到设备上,增加了对开发者账号的限制。如果你没有开发者账号,就无法安装一些自己编写的应用,或是一些非App Store上的应用。本文将向大家介绍一种免开发者账号激活的方法,以方便大家自由地使用自己的iOS设备。 步骤1. 下载iOS 9 Beta 苹果公司在推…

    other 2023年6月26日
    00
  • 关于c#:“readline”(在行首输出)

    C#: “ReadLine” (在行首输出) 在C#中,Console.ReadLine()函数用于从控制台读取用户输入。有时,我们需要在用户输入的行首输出一些文本。以下关于C#: “ReadLine” (在行首输出)的完整攻略,包括常见问题和两个示例说明。 常见问题 如何在C#中在行首输出文本? 要在C#中在行首输出文本,可以使用Console.Write…

    other 2023年5月9日
    00
  • Windows 11 CO-21H2 22000.194 正式版官方下载地址(附esd微软三语直链下载x64+arm64)

    Windows 11 CO-21H2 22000.194 正式版官方下载攻略 Windows 11 CO-21H2 22000.194 是微软发布的最新正式版操作系统。本攻略将详细介绍如何下载和安装该版本的Windows 11,并提供两个示例说明。 下载地址 你可以从以下官方下载地址获取Windows 11 CO-21H2 22000.194: x64版本下…

    other 2023年8月4日
    00
  • linuxvi查找命令

    在Linux中,vi是一种文本编辑器,可以用于编辑文本文件。在vi中,可以使用查找命令来查找文本文件中的特定文本。以下是在Linux中使用vi查找命令的完整攻略: 步骤1:打开文件 首先,需要使用vi打开要查找的文件。可以使用以下命令打开文件: vi filename 在此命令中,filename是要打开的文件名。 步骤2:进入查找模式 在vi中,可以使用/…

    other 2023年5月9日
    00
  • SAP ERP常用表

    SAP ERP常用表的完整攻略 SAP ERP是一款企业资源计划软件,它包含了许多常用的表格,用于存储企业的各种数据。本文将介绍一些常用的SAP ERP表格,以及如何使用它们。 1. MARA表 MARA表是SAP ERP中的一个常用表格,用于存储物料主数据。它包含了物料的基本信息,如物料号、描述、单位、重量、体积等。 示例1:查询物料主数据 我们可以使用S…

    other 2023年5月5日
    00
  • nodejs中package.json解析

    以下是“Node.js中package.json解析”的完整攻略: Node.js中package.json解析 在Node.js中,package.json是一个重要的文件,它包含了项目的元数据和依赖信息。以下是使用Node.js解析package.json的步骤: 打开命令行界面。 在开始之前,您需要打开命令行界面。Windows上,您可以使用“cmd”…

    other 2023年5月7日
    00
  • delphi中treeview使用

    当然,我可以为您提供有关“Delphi中TreeView使用”的完整攻略,以下是详细说明: 什么是Delphi中TreeView? Delphi中的TreeView是一种用于显示层次结构数据控件。它可以帮助您在应用程序中创建树形结构的用户界面,以便用户可以轻松地浏览和管理数据。 Delphi中TreeView的使用攻略 以下是Delphi中TreeView的…

    other 2023年5月7日
    00
  • mac上打开终端的7种简单方法

    以下是mac上打开终端的7种简单方法的完整攻略,包括基本介绍、使用方法、注意事项和示例说明等内容。 1. 基本介绍 终端是macOS中的一个命令行工具,可以用于执行各种命令和脚本。在macOS中,有多种方法可以打开终端,包括使用快捷键、应用程序、Spotlight等。 2. 使用方法 以下是mac上打开终端的7种简单方法: 方法1:使用快捷键 在macOS中…

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