插入排序(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),不会进行移动,前后两个数的次序不会发生改变