过程
1、从数组第2个元素开始抽取元素。
2、把它与左边第一个元素比较,如果左边第一个元素比它大,则继续与左边第二个元素比较下去,直到遇到不比它大的元素,然后插到这个元素的右边。
3、继续选取第3,4,….n个元素,重复步骤 2 ,选择适当的位置插入。
动图展示
 
代码实现
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 
 | 
 
 
 public class InsertSort {
 
 public static int[] insertSort(int[] arr) {
 if (arr == null || arr.length < 2) {
 return arr;
 }
 int n = arr.length;
 for (int i = 1; i < n; i++) {
 int temp = arr[i];
 int k = i - 1;
 while (k >= 0 && arr[k] > temp) {
 k--;
 }
 
 for (int j = i; j > k + 1; j--) {
 arr[j] = arr[j - 1];
 }
 
 arr[k + 1] = temp;
 }
 return arr;
 }
 
 public static void main(String[] args) {
 int[] arr = {2, 5, 3, 1, 4, 6};
 insertSort(arr);
 System.out.println(Arrays.toString(arr));
 }
 
 }
 
 | 
性质:
- 时间复杂度:O(n2)
- 空间复杂度:O(1)
- 稳定排序
- 原地排序
参考