前端排序算法-----插入排序(简单插入+希尔插入)

一. 简单插入排序
1.算法描述:
(1)从数组index=1开始,与左边进行比较,如果比左边的值小,左边的值在数组中右移一位
(2) 直至左边的值比该值大或者左边数组循环完毕,将该值插入
(3)数组其余元素依次循环执行上述的步骤
2.算法实现:

  function insertSort(arr){
   //从index=1开始逐个插入
   for(let i=1;i<arr.length;i++){
   //放置arr[i]被覆盖掉
      let temp=arr[i]
      for(let m=i-1;m>=0;m--){
         if(arr[m]>temp){
            arr[m+1]=arr[m]
         }else{
           arr[m+1]=temp;
           break;
         }
      }
   }
    return arr
 }

3.算法分析
最优时间复杂度:O(n)
最差时间复杂度:O(n的平方)
平均时间复杂度:O(n的平方)
空间复杂度: O(1)
稳定性:稳定(小于等于的时候插入后面)
二.希尔排序
1.算法描述
在简单的插入排序算法上添加了gap(间隔),循环递减这个间隔直至为1
2.算法实现

 function shellSort(arr){
    //确定初始的gap的值
    let gap=Math.floor(arr.length/2);
    //循环gap直至为1
    for(let i=gap;i>=1;i=Math.floor(i/2)){
    //进行简单插入排序
		for(let m=i;m<arr.length;m++){
		    let temp=arr[m];
            for(let n=m-i;n>=0;n=n-i){
               if(arr[n]>temp){
                   arr[n+i]=arr[n];
               }else{
                   arr[n+i]=temp;
                   break;
               }
            }   
        }
    }
    return arr;
 }

3.算法分析
最优时间复杂度:O(n)
最差时间复杂度:O(n的平方)
平均时间复杂度:O(n的1.3次方)
空间复杂度: O(1)
稳定性:不稳定(多次进行插入排序,导致数据位置发生改变)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值