算法基础--直接插入排序

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应该就是整个宇宙的答案。

以上是关于算法基础--直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之直接插入排序

基础排序算法···插入排序

重温基础算法内部排序之插入排序法

数据结构和算法基础之直接插入排序

2-算法基础

八大排序算法之一直接插入排序