算法基础--直接插入排序
Posted 谓戒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础--直接插入排序相关的知识,希望对你有一定的参考价值。
基本思想:
在所有需要排序的元素中,假如前面n-1(n>1)个元素是有序的,那么现在需要做的将第n个元素插到前面的有序元素中,使得这n个元素也是有序的,如此反复循环,直到全部所有元素都是有序的。
过程:
(1)将指针指向某个元素(从n开始(n>1)),假如该元素左侧的元素有序,将该元素取出来,然后按照从右到左的顺序分别与左边的元素比较,遇到比其大元素便将元素右移,直到找到比该元素小的元素或者找到最左边的元素都比它大,停
(2)此时会出现一个空位,将该元素放进该空位,此时该元素的左边元素都比它小,右边元素都比它大;
(3)指针指向下一个元素,重复1,2过程,左侧有序元素增加一个;
注意边界:当arr[n] = arr[i],不要移动,是为了算法的稳定性;
时间复杂度计算:
(1)最好的情况:当所有元素都是有序的时候,比较次数:n-1,交换次数:0;所以是O(n);
(2)最坏的情况:当所有的元素都是反序的时候,比较次数:n(n-1)/2,交换次数:3n(n-1)/2;所以是O(n^2);
所以平均复杂度O(n^2);
实例代码:
public class InsertSort{
private int[] arr;
private int length;
public InsertSort(int[] arr){
this.arr = arr;
this.length = arr.length;
}
private void doInsertSort(){
log.debug("排序前元素:" + Arrays.toString(arr) + ":元素数:" + length);
for(int index =1; index <length;index++){
int temp = arr[index];
int left = index-1;
for(;left >=0 && arr[left] > temp; left--){
arr[left+1] = arr[left];
}
arr[left+1] = temp;
}
log.debug("排序后元素:" + Arrays.toString(arr)+ ":元素数:" + length);
}
}
五条线:
(1)工作;
(2)基础算法复习:排序算法,AI算法,及其他基础算法。。。
(3)源码分析阅读:JDK源码,框架源码。。。
(4)大数据开发学习:hoodp,数据分析。。。
(5)考级考各种证书及自己想学的新技术
前辈:一定要提醒我们自己,一定要远离舒适区,不能安于现状,要有危机意识,想办法拥有一个令自己不断做好的目标,否则我们42岁时怕也会跳楼,在我们眼中--42应该就是整个宇宙的答案。
以上是关于算法基础--直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章