排序

作者: Lyan_2ab3 | 来源:发表于2020-05-20 13:31 被阅读0次

    冒泡排序:
    最简单的排序算法之一;平均复杂度O(n2),最好的情况O(n),最坏的排序O(n2)

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

    选择排序:

    function selectionSort(arr) {
        var len = arr.length;
        var minIndex, temp;
        for (var i = 0; i < len - 1; i++) {
            minIndex = i;
            for (var j = i + 1; j < len; j++) {
                if (arr[j] < arr[minIndex]) {     //寻找最小的数
                    minIndex = j;                 //将最小数的索引保存
                }
            }
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
        return arr;
    }
    
    
    

    快速排序:

    function quickSort(arr) {
      if(arr.length<=1) {
        return arr;
      }
      var s = Math.floor(arr.length/2);
     
      var temp = arr.splice(s,1);
      
      var left=[];
      var right=[];
      for(var i=0;i<arr.length;i++) {
        if(arr[i]<temp) {
          left.push(arr[i]);
        }
        if(arr[i]>=temp) {
          right.push(arr[i]);
        }
      }
      
      return quickSort(left).concat(temp,quickSort(right));  
      
    }
    
    

    插入排序:

    function insertionSort(arr) {
        var len = arr.length;
        var preIndex, current;
        for (var i = 1; i < len; i++) {
            preIndex = i - 1;
            current = arr[i];
            while(preIndex >= 0 && arr[preIndex] > current) {
                arr[preIndex+1] = arr[preIndex];
                preIndex--;
            }
            arr[preIndex+1] = current;
        }
        return arr;
    }
    

    希尔排序:

    。希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版》的合著者Robert Sedgewick提出的。在这里,我就使用了这种方法。

    function shellSort(arr) {
        var len = arr.length,
            temp,
            gap = 1;
        while(gap < len/3) {          //动态定义间隔序列
            gap =gap*3+1;
        }
        for (gap; gap > 0; gap = Math.floor(gap/3)) {
            for (var i = gap; i < len; i++) {
                temp = arr[i];
                for (var j = i-gap; j >= 0 && arr[j] > temp; j-=gap) {
                    arr[j+gap] = arr[j];
                }
                arr[j+gap] = temp;
            }
        }
        return arr;
    }
    
    WechatIMG580.png

    相关文章

      网友评论

          本文标题:排序

          本文链接:https://www.haomeiwen.com/subject/dtssohtx.html