JS排序算法之希尔排序与快速排序实现方法

网络编程 2025-03-24 10:25www.168986.cn编程入门

本文将介绍JavaScript中的两种排序算法:希尔排序和快速排序。结合实例,我们将深入理解这两种算法的原理以及它们在JavaScript中的实现技巧。

以下是希尔排序的JavaScript实现:

```javascript

function shellSort() {

var arr = [...this.arr]; // 避免改变原数组

var N = arr.length;

var h = 1;

while (h < N / 3) {

h = 3 h + 1; // 设置间隔

}

while (h >= 1) {

for (var i = h; i < N; i++) {

var j = i;

while (j >= h && arr[j] < arr[j - h]) { // 进行交换操作

swap(arr, j, j - h);

j -= h;

}

}

h = Math.floor(h / 3); // 更新间隔

}

}

function swap(array, i, j) { // 交换数组中两个元素的位置

var temp = array[j];

array[j] = array[i];

array[i] = temp;

}

```

接下来是快速排序。这是一种基于递归的排序算法,通过将数据分解成包含较小元素和较大元素的不同子序列,然后不断重复这个过程,直到所有数据都是有序的。快速排序的核心在于选择一个基准值,然后将小于基准值的元素放在左边,大于基准值的元素放在右边。快速排序的时间复杂度也是O(nlogn)。对于小型数据集来说,其性能可能会下降。这是因为递归操作的开销在小数据集上可能无法被优化的很好。

以下是快速排序的JavaScript实现:

```javascript

function quickSort(arr) {

if (arr.length <= 1) { // 如果数组长度小于等于1,直接返回数组本身(已经是有序的)

return arr;

} else { // 如果数组长度大于1,则进行快速排序操作

var pivotIndex = Math.floor(arr.length / 2); // 选择基准值的位置(这里选择中间的值作为基准值)

var pivot = arr.splice(pivotIndex, 1)[0]; // 使用splice移除基准值(这个步骤会将基准值移除并放入一个新数组)

var left = []; // 存储小于基准值的元素的新数组(左边数组)

var right = []; // 存储大于基准值的元素的新数组(右边数组)

for (var i = 0; i < arr.length; i++) { // 对剩余的元素进行划分操作,将小于基准值的放在左边,大于基准值的放在右边(不包括基准值本身)

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by