public static void main(String[] args) { int[] arr = {1, 3, 5, 7, 8, 3, 4, 6, 0}; System.out.println(Arrays.toString(insertSort(arr)));} /** * 插入排序 对已经排好序的的元素进行 找出当前元素在其中的位置然后插入 * * @param arr * @return */ public static int[] insertSort(int[] arr) { if (arr != null && arr.length > 0) { /** * i = 0 * j = 1 a[0] compareTo a[1] j-- * j = 0 a[0] compareTo a[0] * result a[0]<a[1] * i = 1 * j = 2 a[1] compareTo a[2] j-- * j = 1 a[0] compareTo a[1] j-- * j = 0 a[0] compareTo a[0] * result a[0]<a[1]<a[2] * i = 2 * j = 3 a[2] compareTo a[3] j-- * j = 2 a[1] compareTo a[2] j-- * j = 1 a[0] compareTo a[1] j-- * j = 0 a[0] compareTo a[0] * result a[0]<a[1]<a[2]<a[3] * i = 3 * j = 3 a[3] compareTo a[4] j-- * j = 3 a[2] compareTo a[3] j-- * j = 2 a[1] compareTo a[2] j-- * j = 1 a[0] compareTo a[1] j-- * j = 0 a[0] compareTo a[0] * result a[0]<a[1]<a[2]<a[3]<a[4] * .... * * i = arr.length - 1 */ for (int i = 0; i < arr.length -1; i++) { for (int j = i + 1; j >= 1 && j < arr.length; j--) { // 冒泡逻辑 if (arr[j-1] > arr[j]) { int temp = arr[j-1]; arr[j-1] = arr[j]; arr[j] = temp; } } } } return arr == null ? new int[]{} : arr; } public static int[] insertSort2(int[] arr){ // from 1 to 9 sorted for(int i = 0;i<arr.length ;i++){ for(int j = i;j-1 >= 0 ;j--){ if(arr[j] < arr[j-1]){ int temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] =temp; }else{ break; } } } return arr; }// real public static int[] insertSort3(int[] arr){ if(arr != null && arr.length > 0){ for(int i = 1;i<arr.length ;i++){ int j = i -1; int cur = arr[i]; for(;j>=0 && arr[j] > cur ;j--){ arr[j+1] = arr[j]; } arr[j+1] = cur; } } return arr == null ? new int[]{} : arr; }// 输出结果 [0, 1, 3, 3, 4, 5, 6, 7, 8]