过程
1、从数组第2个元素开始抽取元素。
2、把它与左边第一个元素比较,如果左边第一个元素比它大,则继续与左边第二个元素比较下去,直到遇到不比它大的元素,然后插到这个元素的右边。
3、继续选取第3,4,….n个元素,重复步骤 2 ,选择适当的位置插入。
动图展示
代码实现
1 2 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)
- 稳定排序
- 原地排序
参考