插入排序是简单排序中效率最好的一种,它也是学习其它Java排序的基础,所以非常重要@mikechen
插入排序定义
插入排序,英文名为InsertionSort,一般也被称为直接插入排序。
何谓插入排序:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止。
插入排序基本思想
插入排序的思想打牌的人肯定很容易理解,就是见缝插针。
插入排序的基本思路,主要分为如下4步:
1)首先,从第一个元素开始,该元素可以认为已经被排序;
2)取出下一个元素,与已经排序的数,按从后向前的顺序依次比较;
3)如果该数比当前位置排好序的数小,则将排好序的数的位置向后移一位;
4)重复上一个步骤,直到找到已排序的元素小于或者等于新元素的位置,将新元素插入到该位置后,重复上面的步骤。
插入排序图解
上面我们理解了大致的思路,下面我们看一个动图就会更加清楚。
下图所示:
备注:黄色表示已排序部分,蓝色表示未排序部分,红色表示当前正在处理的。
插入排序代码案例
上面我们了解了思路与原理,下面我们具体编程程序来实现。
代码如下:
//插入排序 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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》