算法学习:插入排序

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

 

代码实现

public static void insertSort(int[] array){

if(array.length==0)

    return array;

for(int i =0;i<array.length,i++){

   int key = array[i];  //获取插入的值;

   int end = i-1;  

       while(end>=0 && key<array[end]){

          array[end+1]=array[end];

          end --;         

  }

 array[end+1]=key;

     }

}

【性能分析】

元素集合越接近于有序,直接插入排序算法的时间效率就越高,也就是说插入排序适用于处理数据量比较少或者部分有序的数据

1)时间复杂度

对于n个数字,首先我从最外层的for循环要进行n次,然后里面的while循环是根据i决定的,i=0时,不进入循环;i=1时循环1次;i、=2时,循环2次;i=3时循环3次,.....i=n-1时循环n-1次,则加起来就是1+2+3+4+......+n-1=,根据大O渐进法复杂度计算规则,保留最高阶,并去掉系数,那么时间复杂度为(最坏情况),最好的情况是数组中各元素都已序,则时间复杂度为,那么平均情况下次数为,所以综上,直接排序的时间复杂度为。

(2)空间复杂度

空间复杂度为O(1),原因只创建了一个对象key

(3)稳定性

是稳定的,因为在比较的时候,如果两个数相等的话(对比看上图中两个23),不会进行移动,前后两个数的次序不会发生改变
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值