zoukankan      html  css  js  c++  java
  • js排序算法

    一 插入排序

    直接插入排序

    根据顺序将未排序数组中的元素一一插入已排序好的数组中

    function insert(arr){
      var source = arr;
      var result = [];
      for(var i=0; i<source.length; i++){ //时间频度 n
        if(i==0){ //n
          result[0]=source[0] //1
        } else{
          for(var j=0; j<result.length; j++){ //n^2-1
            if(source[i]<result[j]){ //n^2
              result.splice(j, 0, source[i]); n^2
              break;
            } else {
              if(j==result.length-1) { n^2
                result[j+1]=source[i]; n^2
                break;
              }
            }
          }
        }
      }
      return result; }
    时间复杂度: O(n^2)

    二 选择排序

    二元选择排序

    将代排序数组中的最大和最小值选出来分别移到数组的两端

    
    

    function minMax(arr){
      if(arr.length<=1){
        return arr[0];
      }
      var minIndex, maxIndex;
      for(var k=0; k<arr.length; k++){  // n^2
        if(k==0){
          if(arr[k]<=arr[k+1]){
            minIndex=k;
            maxIndex=k+1;
          } else {
            minIndex=k+1;
            maxIndex=k;
          }
        } else{
          if(k>=2){
            if(arr[k]<arr[minIndex]){
              minIndex=k
            } else if(arr[k]>arr[maxIndex]){
              maxIndex=k
            }
          }
        }
      }
      var result={min:arr[minIndex], max:arr[maxIndex]}
      if(minIndex<=maxIndex){
        arr.splice(minIndex, 1);
        arr.splice(maxIndex-1, 1);
      } else{
        arr.splice(maxIndex, 1);
        arr.splice(minIndex-1, 1)
      }
      return result
    }
    function select(arr){
      var source=arr;
      var result=[];
      result.length=source.length;
      var length=source.length;
      for(var i=0; i<length/2; i++){  // n/2
        var min_max=minMax(source)
        if(typeof min_max === 'number'){
          result[i]=min_max;
          break;
        }
        var min=min_max.min;
        var max=min_max.max;
        result[i]=min;
        result[length-i-1]=max;
      }
      console.log(result)
    }
    var arr=[1,5,2,5,47,8,9,4,7];
    select(arr)

    时间复杂度:O(n^2)

    三 交换排序

    冒泡排序

    function prop(arr){
      var length=arr.length;   for(var i=length-1; i>0; i--){ //n
        var exchange=true;
        for(var j=0; j<i; j++){ //n^2
          if(arr[j]>arr[j+1]){
            arr.splice(j, 2, arr[j+1], arr[j]);
            exchange=false
          }
        }
        if(exchange){
          break;
        }  
      }
      console.log(arr)
    }
    时间复杂度:O(n^2)
  • 相关阅读:
    目前流行的缺陷管理工具
    高性能WEB开发之Web性能测试工具推荐
    测试工具
    简单的事件示例代码
    C#常用代码片段备忘
    C# 获取变量或对象的栈与堆地址
    C#常用的命名规则汇总
    C# 成员默认访问权限(public、private、protected、internal)
    C# 学习路线
    简单的异常例子
  • 原文地址:https://www.cnblogs.com/zhaozhipeng/p/8067669.html
Copyright © 2011-2022 走看看