插入排序的思想非常简单,生活中有一个很常见的场景:在打扑克牌时,我们一边抓牌一边给扑克牌排序,每次摸一张牌,就将它插入手上已有的牌中合适的位置,逐渐完成整个排序。
插入排序有两种写法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public static void insertSort(int[] arr) { for (int i = 1; i < arr.length; i++) { int j = i; while (j >= 1 && arr[j] < arr[j - 1]) { swap(arr, j, j - 1); j--; } } } private static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public static void insertSort(int[] arr) { for (int i = 1; i < arr.length; i++) { int currentNumber = arr[i]; int j = i - 1; while (j >= 0 && currentNumber < arr[j]) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = currentNumber; } }
|
插入排序时间复杂度O($n^2$),空间复杂度O(1)。
插入排序是稳定的排序算法。