【JS】排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序)

本文介绍了JavaScript中五种常见的排序算法:冒泡排序、选择排序、插入排序、快速排序和归并排序,并提供了相应的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序)

代码示例:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    // 冒泡排序
    function maopao(arr) {
      for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr.length - 1; j++) {
          if (arr[j] > arr[j + 1]) {
            let temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
          }
        }
      }
      return arr;
    }
    var newArr1 = maopao([2, 1, 3, 6, 7, 4, 9, 2, 1, 4, 5, 3]);
    console.log(newArr1);   // [1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 9]

    // 选择排序
    // 每一趟排序都是从当前无序序列中找出最小数并记录其下标,然后将这个最小数和当前无序序列的第一个数进行交换;如此循环直到数组有序
    function xvanze(arr) {
      for (var i = 0; i < arr.length; i++) {
        var min = arr[i];
        var k = i;
        for (var j = i + 1; j < arr.length; j++) {    // 每次循环找出后面的最小值及其下标
          if (arr[j] < min) {
            min = arr[j]
            k = j
          }
        }
        if (k != i) {
          let temp = arr[i];
          arr[i] = arr[k];
          arr[k] = temp
        }
      }
      return arr;
    }
    var newArr2 = xvanze([2, 1, 3, 6, 7, 4, 9, 2, 1, 4, 5, 3]);
    console.log(newArr2);     // [1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 9]

    // 插入排序
    // 将数组第一个元素看做已经排序好的,按顺序遍历后面未排序的数据,每遍历到一个,将它和已经排序的数组元素进行比较,将它插入到合适的位置
    function charu(arr) {
      for (let i = 1; i < arr.length; i++) {
        let flag = i;
        let compare = arr[i];
        for (let j = i - 1; j >= 0; j--) {
          if (arr[j] > compare) {
            flag = j;
            arr[j + 1] = arr[j];
          }
        }
        arr[flag] = compare;
      }
      return arr;
    }
    var newArr3 = charu([2, 1, 3, 6, 7, 4, 9, 2, 1, 4, 5, 3]);
    console.log(newArr3);   // [1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 9]

    // 快速排序
    function kuaisu(arr) {
      if (arr.length <= 1) {
        return arr;
      }
      let first = arr.splice(0, 1)[0]   // 拿到第一个元素 // 基准数(每次都要删除数组的第一个元素,将它作为基准数)
      let left = [];
      let right = [];
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] < first) {
          left.push(arr[i]);
        } else {
          right.push(arr[i]);
        }
      }
      return kuaisu(left).concat([first], kuaisu(right));
    }
    console.log(kuaisu([2, 5, 3, 1, 6, 4, 2]))    // [1, 2, 2, 3, 4, 5, 6]
    var newArr4 = kuaisu([2, 4, 1, 3, 6, 7, 4, 9, 2, 1, 4, 5, 3]);  // [1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 6, 7, 9]
    console.log(newArr4);

    // 归并排序
    //合并数组函数
    function merge(arr1, arr2) {
      let res = [];
      while (arr1.length > 0 && arr2.length > 0) {
        if (arr1[0] > arr2[0]) {
          res.push(arr2.shift())
        } else {
          res.push(arr1.shift())
        }
      }
      return res.concat(arr1, arr2)
    }
    //归并排序
    function MergeSort(arr) {
      if (arr.length == 1) return arr
      let mid = Math.floor(arr.length / 2)
      let arr1 = arr.slice(0, mid)
      let arr2 = arr.slice(mid)
      return merge(MergeSort(arr1), MergeSort(arr2))
    }
    console.log(MergeSort([2, 1, 3, 6, 7, 4, 9, 2, 1, 4, 5, 3]))  // [1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 9]

  </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值