插入排序图解(算法原理及代码案例)

插入排序图解(算法原理及代码案例)-mikechen

插入排序是简单排序中效率最好的一种,它也是学习其它Java排序的基础,所以非常重要@mikechen

插入排序定义

插入排序,英文名为InsertionSort,一般也被称为直接插入排序。

何谓插入排序:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止。

 

插入排序基本思想

插入排序的思想打牌的人肯定很容易理解,就是见缝插针。

插入排序的基本思路,主要分为如下4步:

1)首先,从第一个元素开始,该元素可以认为已经被排序;

2)取出下一个元素,与已经排序的数,按从后向前的顺序依次比较;

3)如果该数比当前位置排好序的数小,则将排好序的数的位置向后移一位;

4)重复上一个步骤,直到找到已排序的元素小于或者等于新元素的位置,将新元素插入到该位置后,重复上面的步骤。

 

插入排序图解

上面我们理解了大致的思路,下面我们看一个动图就会更加清楚。

下图所示:

插入排序图解(算法原理及代码案例)-mikechen

备注:黄色表示已排序部分,蓝色表示未排序部分,红色表示当前正在处理的。

 

插入排序代码案例

上面我们了解了思路与原理,下面我们具体编程程序来实现。

代码如下:

//插入排序
public static void insertSort(int[] arr){
//用于记录数据以及下标
int temp = 0 , j = 0;
//从第二个数(即 i = 1)开始进行对前面进行插入
    for(int i = 1; i < arr.length; i++){
    //记录这个数以及下标
    temp = arr[i];
    j = i;

    //记录下的temp比它前面的数(j - 1)要小,则往前插入,当j = 0时为最前面的数了,所以结束
    while (j > 0 && temp <arr[j - 1]){
    //直接让在自己前面的数将自己覆盖(可以看成是前面的数往后退了),因为已经用temp记录下来了
        arr[j] = arr[j-1];
        //然后继续往前找
        j--;
    }
    //循环结束后,则说明已经找到了位置,而且下标为j,直接插入即可
        arr[j] = temp;
    }
}

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法