排序小结

两路快排:

function partion(arr, low, high){
   var idx = low;
   var pivot = arr[low];
   while(low<high){
      while(low<high && arr[high]>= pivot){ high--; }
      while(low<high && arr[low] <= pivot) { low++; }
      if(low<high){
         var temp = arr[high];
         arr[high] = arr[low];
         arr[low] = temp;
      }
   }
   if(low == high){
     arr[idx] = arr[low];
     arr[low] = pivot;
   }
   return low;
}

function quicksort1(arr, low, high){
  if(low < high ){
     var pivot = partion(arr, low, high);
     quicksort(arr, low, pivot-1);
     quicksort(arr, pivot+1, high);
  }
}

function quicksort2(arr, low, high){
   var stack = [];
   if(low<high){
     var mid = partion(arr, low, high);
     if(low< mid -1){
       stack.push(low);
       stack.push(mid-1);
     }
     if(mid+1< high){
       stack.push(mid+1);
       stack.push(high);
     }
   }

    while(stack.length > 0){
      var higher = stack.pop();
      var lower = stack.pop();
      var midder = partion(arr, lower, higher);
      if(lower < midder -1){
         stack.push(lower);
         stack.push(midder -1);
      }
      if(midder+1 < higher){
         stack.push(midder + 1);
         stack.push(higher);
      }
    }

}

var arr = [3,6,2,9,4,7];
quicksort1(arr, 0, arr.length -1);
quicksort2(arr, 0, arr.length -1);


冒泡排序:优化后的

function Bubblesort(arr){
  var len = arr.length;
  for(var i=0;i< len-1; i++){ //代表要排序多少次
    for(var j=0;j< len-i-1;j++){ //每次的起始和截止位置
      if(arr[j] > arr[j+1]){
         var tem = arr[j];
         arr[j] = arr[j+1];
         arr[j+1] = tem;
      }  
    }
  }
}

选择排序:

function Selection(arr){
   for(var i=0;i< arr.length-1; i++){ //代表要排序多少次
     for(var j=i+1; j<arr.length; j++){ //起始和截止位置
        if(arr[i] > arr[j]){
           var temp = arr[i];
           arr[i] = arr[j];
           arr[j] = temp;
        }
     }
   }
}

插入排序:一般的插入排序

对于每个未排序数,在已排序序列中从后向前扫描找到相应位置并插入。默认arr[0]为开始。

function InsertSort(arr){
   for(var i=1;i< arr.length;i++){ //需要对arr.length-1个数进行排序,级进行这么多次
     var item = arr[i]; //记录待排序数数值和下标
     var pos = i;
     while(i>0 && item< arr[i-1]){ //找应该插在哪个位置
        i--;
     }
     //位置已确定,即从i位置往后移动
     for(var k=pos; k>i; k--){
       arr[k] = arr[k-1];
     }
     arr[k] = item;
   }
}
存在缺陷:我在查找应该插入哪个位置的时候只是单纯的去找位置,找到后才移动,可以更为优化,即在查找的时候若不是就移动一个

function InsertSort(arr){
   for(var i=1;i< arr.length;i++){
     var item = arr[i];
     var pos = i;
     while(i>0 && item< arr[i-1]){
        arr[i] = arr[i-1];
        i--;
     }
     arr[i] = item;
   }
}

希尔排序:分组插入排序(高级插入排序)

第一次排序:将数组按增量划分为多个列,装在一个表中,对列分别进行插入排序,之后再合并为一个数组
第二次排序:将数组按另一个增量划分多个列,同上

function shellSort(arr){
var gap = Math.floor(arr.length/2); 
while(gap>0){
  for(var i=gap; i<arr.length; i++){
     var temp = arr[i];
     while(i>=gap && temp < arr[i-gap]){
       arr[i] = arr[i-gap];
       i -= gap;
     }
     arr[i] = temp;
  }
  gap = Math.floor(gap/2);
  console.log(gap)
 }
}

归并排序:

有点问题:

function dev(arr){
  if(arr.length <=1) return arr;
  var mid = Math.floor(arr.length/2);
  var leftarr = dev(arr.slice(0, mid));
  var rightarr = dev(arr.slice(mid));
  return merge(leftarr, rightarr);
}

function merge(leftarr, rightarr){ 
  var l,r = 0;
  var result = [];
  while(l<leftarr.length && r< rightarr.length){
    if(leftarr[l] < rightarr[r]){
      result.push(leftarr[l]);
      l++
    }else{
      result.push(rightarr[r]);
      r++;
    }
  }
  for(var i=l; i< leftarr.length; i++){
     result.push(leftarr[i]);
  }
  for(var i=r; i< rightarr.length; i++){
     result.push(rightarr[i]);
  }
  return result;
}

二分排序:

function binarySearch(value,arr,startIndex,endIndex) {
    if(!value|| !(arr instanceof Array)) return;
    var    midIndex= Math.floor((startIndex + endIndex)/2),
        midval = arr[midIndex];
    
    if(midval === value){
        return midIndex;
    }else if (midval > value) {
       return binarySearch(value, arr, startIndex, midIndex - 1);
    }else {
       return binarySearch(value, arr, midIndex + 1, endIndex);
    }
}

转载自:http://www.cnblogs.com/venoral/p/5836106.html

混合动力汽车(HEV)模型的Simscape模型(Matlab代码、Simulink仿真实现)内容概要:本文档介绍了一个混合动力汽车(HEV)的Simscape模型,该模型通过Matlab代码和Simulink仿真工具实现,旨在对混合动力汽车的动力系统进行建模与仿真分析。模型涵盖了发动机、电机、电池、传动系统等关键部件,能够模拟车辆在不同工况下的能量流动与控制策略,适用于动力系统设计、能耗优化及控制算法验证等研究方向。文档还提及该资源属于一个涵盖多个科研领域的MATLAB仿真资源包,涉及电力系统、机器学习、路径规划、信号处理等多个技术方向,配套提供网盘下载链接,便于用户获取完整资源。; 适合人群:具备Matlab/Simulink使用基础的高校研究生、科研人员及从事新能源汽车系统仿真的工程技术人员。; 使用场景及目标:①开展混合动力汽车能量管理策略的研究与仿真验证;②学习基于Simscape的物理系统建模方法;③作为教学案例用于车辆工程或自动化相关课程的实践环节;④与其他优化算法(如智能优化、强化学习)结合,实现控制策略的优化设计。; 阅读建议:建议使用者先熟悉Matlab/Simulink及Simscape基础操作,结合文档中的模型结构逐步理解各模块功能,可在此基础上修改参数或替换控制算法以满足具体研究需求,同时推荐访问提供的网盘链接获取完整代码与示例文件以便深入学习与调试。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值