js其中的几种排序算法

排序算法是计算机科学中用于对元素序列进行排序的一系列算法
一下是js其中几种排序方法

1. 冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

function bubbleSort(arr) {
  let len = arr.length;
  for (let i = 0; i < len - 1; i++) {
    for (let j = 0; j < len - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        // 交换相邻元素
        let temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

// 示例
const arr = [64, 34, 25, 12, 22, 11, 90];
console.log("Sorted array:", bubbleSort(arr));

2. 快速排序(Quick Sort)

快速排序是一种分治法策略的排序算法,它通过一个轴值(pivot)将数组分成两个子数组,左边的数组元素都比轴值小,右边的数组元素都比轴值大,然后递归地对这两个子数组进行快速排序。

function quickSort(arr) {
  if (arr.length < 2) {
    return arr;
  }
  const pivot = arr[0];
  const left = [];
  const right = [];

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

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

// 示例
const arr = [7, 2, 1, 6, 8, 5, 3, 4];
console.log("Sorted array:", quickSort(arr));

3.插入排序(Insertion Sort)

插入排序的工作方式像我们整理扑克牌一样。首先,我们认为第一张牌是已经排序好的,然后我们逐渐从剩余的牌中取出每一张,将它插入到已排序序列中的适当位置。

function insertionSort(arr) {
  for (let i = 1; i < arr.length; i++) {
    let current = arr[i];
    let j = i - 1;
    // 将当前元素与已排序的元素比较并插入到正确的位置
    while (j >= 0 && arr[j] > current) {
      arr[j + 1] = arr[j];
      j--;
    }
    arr[j + 1] = current;
  }
  return arr;
}

// 示例
const arr = [5, 2, 9, 1, 5, 6];
console.log("Sorted array:", insertionSort(arr));

4. 归并排序(Merge Sort)

归并排序是使用分治法的一个非常典型的应用。它将数组分成两半,对每一半进行排序,然后将排序好的两半合并在一起。

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

  const middle = Math.floor(arr.length / 2);
  const left = arr.slice(0, middle);
  const right = arr.slice(middle);

  return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right) {
  let result = [];
  let leftIndex = 0;
  let rightIndex = 0;

  while (leftIndex < left.length && rightIndex < right.length) {
    if (left[leftIndex] < right[rightIndex]) {
      result.push(left[leftIndex]);
      leftIndex++;
    } else {
      result.push(right[rightIndex]);
      rightIndex++;
    }
  }

  return result.concat(left.slice(leftIndex)).concat(right.slice(rightIndex));
}

// 示例
const arr = [4, 38, 34, 12, 8, 7, 3, 1];
console.log("Sorted array:", mergeSort(arr));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值