zoukankan      html  css  js  c++  java
  • JS十大经典排序排序算法

    1.冒泡排序

    冒泡排序通常排在第一位,说明它是排序算法的入门算法,是最简单的一个排序算法,而且必须掌握和理解。

    先来看看代码吧:

    function bubbleSort(arr) {
      let temp;
      for (let i = 0, len = arr.length; i < len; i++) {
        for (let j = 0; j < len - 1 - i; j++) {
          if (arr[j] > arr[j + 1]) {
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
          }
        }
      }
      return arr;
    }
    时间复杂度:O(n^2);
    思路:第一次循环,开始比较当前元素与下一个元素的大小,如果比下一个元素小或者相等,则不需要交换两个元素的值;若比下一个元素大的话,则交换两个元素的值。然后,遍历整个数组,第一次遍历完之后,相同操作遍历第二遍。

    2.选择排序

    function selectionSort(arr) {
      let temp;
      let minIndex;
      for (let i = 0, len = arr.length; i < len - 1; i++) {
        minIndex = i;
        for (let j = i; j < len; j++) {
          if (arr[j] < arr[minIndex]) {
            minIndex = j;
          }
        }
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
      }
      return arr;
    }
    时间复杂度:O(n^2)
    思路:第一遍,从数组中选出最小的,与第一个元素进行交换;第二遍,从第二个元素开始,找出最小的,与第二个元素进行交换;依次循环,完成排序。
     

    3.插入排序

    function insertSort(arr) {
        let len = arr.length;
        for (let i = 0; i < len; i++) {
            let temp  = arr[i];
            for (let j = 0; j < i; j++) {
                if (temp > arr[j] && j === 0) {
                    arr.spice(i, 1);
                    arr.unshif(temp);
                } else if (temp > arr[j] && temp < arr[j + 1] && j < i - 1) {
                    arr.splice(i, 1);
                    arr.splice(j + 1, 0, temp);
                }
            }  
        }
        return arr;
    }
    时间复杂度:O(n^2)
    思路:首先,循环原数组,然后,将当前位置的元素,插入到之前已经排序好的数组中, 依次操作。

    4.快速排序

    function quickSort(arr) {
        let len = arr.length;
        if (len <= 1) {
            return arr;
        }
    
        let temp = arr[0],
            left = [],
            right = [];
        
        for (let i = 1; i < len; i++) {
            if (arr[i] > temp) {
                right.push(arr[i]);
            } else {
                left.push(arr[i]);
            }
        }
        return quickSort(left).concat([temp], quickSort(right));
    }
    时间复杂度:O(nlogn)
    思路:首先,我们需要找到一个基数,然后将比基数小的值放在基数的左边,将比基数大的值放在基数的右边,之后进行递归那两组已经归类好的数组。
     
     
     
  • 相关阅读:
    MPI linux Ubuntu cluster 集群
    python cython c 性能对比
    TCAM CAM 说明 原理 结构 Verilog 硬件实现
    verilog 计算机网络 仿真 激励 pcap
    libtrace 安装 使用 修改
    Dream Spark ------spark on yarn ,yarn的配置
    Dream_Spark-----Spark 定制版:005~贯通Spark Streaming流计算框架的运行源码
    Dream_Spark-----Spark 定制版:003~Spark Streaming(三)
    Dream_Spark-----Spark 定制版:004~Spark Streaming事务处理彻底掌握
    Dream_Spark定制第二课
  • 原文地址:https://www.cnblogs.com/bagexiaowenti/p/10785813.html
Copyright © 2011-2022 走看看