1. public static void main(String[] args) {
    2. int[] arr = {1, 3, 5, 7, 8, 3, 4, 6, 0};
    3. System.out.println(Arrays.toString(insertSort(arr)));
    4. }
    5. /**
    6. * 插入排序 对已经排好序的的元素进行 找出当前元素在其中的位置然后插入
    7. *
    8. * @param arr
    9. * @return
    10. */
    11. public static int[] insertSort(int[] arr) {
    12. if (arr != null && arr.length > 0) {
    13. /**
    14. * i = 0
    15. * j = 1 a[0] compareTo a[1] j--
    16. * j = 0 a[0] compareTo a[0]
    17. * result a[0]<a[1]
    18. * i = 1
    19. * j = 2 a[1] compareTo a[2] j--
    20. * j = 1 a[0] compareTo a[1] j--
    21. * j = 0 a[0] compareTo a[0]
    22. * result a[0]<a[1]<a[2]
    23. * i = 2
    24. * j = 3 a[2] compareTo a[3] j--
    25. * j = 2 a[1] compareTo a[2] j--
    26. * j = 1 a[0] compareTo a[1] j--
    27. * j = 0 a[0] compareTo a[0]
    28. * result a[0]<a[1]<a[2]<a[3]
    29. * i = 3
    30. * j = 3 a[3] compareTo a[4] j--
    31. * j = 3 a[2] compareTo a[3] j--
    32. * j = 2 a[1] compareTo a[2] j--
    33. * j = 1 a[0] compareTo a[1] j--
    34. * j = 0 a[0] compareTo a[0]
    35. * result a[0]<a[1]<a[2]<a[3]<a[4]
    36. * ....
    37. *
    38. * i = arr.length - 1
    39. */
    40. for (int i = 0; i < arr.length -1; i++) {
    41. for (int j = i + 1; j >= 1 && j < arr.length; j--) {
    42. // 冒泡逻辑
    43. if (arr[j-1] > arr[j]) {
    44. int temp = arr[j-1];
    45. arr[j-1] = arr[j];
    46. arr[j] = temp;
    47. }
    48. }
    49. }
    50. }
    51. return arr == null ? new int[]{} : arr;
    52. }
    53. public static int[] insertSort2(int[] arr){
    54. // from 1 to 9 sorted
    55. for(int i = 0;i<arr.length ;i++){
    56. for(int j = i;j-1 >= 0 ;j--){
    57. if(arr[j] < arr[j-1]){
    58. int temp = arr[j];
    59. arr[j] = arr[j-1];
    60. arr[j-1] =temp;
    61. }else{
    62. break;
    63. }
    64. }
    65. }
    66. return arr;
    67. }
    68. // real
    69. public static int[] insertSort3(int[] arr){
    70. if(arr != null && arr.length > 0){
    71. for(int i = 1;i<arr.length ;i++){
    72. int j = i -1;
    73. int cur = arr[i];
    74. for(;j>=0 && arr[j] > cur ;j--){
    75. arr[j+1] = arr[j];
    76. }
    77. arr[j+1] = cur;
    78. }
    79. }
    80. return arr == null ? new int[]{} : arr;
    81. }
    82. // 输出结果 [0, 1, 3, 3, 4, 5, 6, 7, 8]