插入排序概述
插入排序是一种简单的排序方法,对于少量元素的排序,它是一个有效的算法。
基本思想
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
插入排序遍历数组,并保持部分数组的排序顺序,直到它到达结束。
在外环的每一步中,我们都会在正确的位置向数组的排序部分添加一个新的数字。
插入排序迭代,每次重复使用一个输入元素,并增加一个已排序的输出列表。
在每次迭代中,插入排序从输入数据中删除一个元素,找到它在排序列表中所属的位置,并将其插入到那里。它重复,直到没有输入元素保留。
排序通常是在就地完成的,通过迭代数组,增加其后面的排序列表。在每个数组位置,它根据排序列表中的最大值(恰好在之前检查中的数组位置的旁边)检查那里的值。
- 如果较大,它将元素保留在位置并移动到下一个
- 如果较小,它会在排序列表中找到正确的位置,将所有较大的值上移以创建空格,并插入到正确的位置
具体步骤
- 从第一个元素开始,该元素可以认为已经被排序
- 取下一个元素,从已排序的元素序列从后往前扫描
- 如果该元素大于这个被取下的元素,则将该元素移到下一位
- 重复步骤 3,直到找到已排序元素中小于等于被取下的元素的元素
- 把被取下的元素插入到该元素的后面,如果已排序所有元素都大于被取下的元素,则将被取下的元素插入到下标为 0 的位置
- 重复步骤 2~5
代码实现
一维数组
假设现在有一个一维数组 arr = [1, 62, 81, 0, 23, 55, 76, 87, 20, 54, 65, 76, 1]
常规版
import java.util.Arrays;
public class InsertionSort1 {
public static void main(String[] args) {
int[] arr = {1, 62, 81, 0, 23, 55, 76, 87, 20, 54, 65, 76, 1};
arr = InsertionSort(arr);
System.out.println(Arrays.toString(arr));
}
public static int[] InsertionSort(int[] array) {
for ( ; i < array.length - ; i++) {
i;
array[count + ];
(count >= ) {
(temp < array[count]) {
array[count + ] = array[count];
count--;
} {
;
}
}
array[count + ] = temp;
}
array;
}
}


