插入排序时间复杂度O(n^2)
    对于有序数组时间复杂度为O(n)

    1. public static <E extends Comparable<E>> void sort(E[] nums) {
    2. int length = nums.length;
    3. for (int i = 0; i < length; i++) {
    4. int j = i;
    5. //将nums[i]插入到合适的位置
    6. while (j - 1 >= 0) {
    7. if (nums[j].compareTo(nums[j - 1]) < 0) {
    8. E num = nums[j - 1];
    9. nums[j - 1] = nums[j];
    10. nums[j] = num;
    11. }
    12. j--;
    13. }
    14. }
    15. System.out.println(Arrays.toString(nums));
    16. }
    17. public static <E extends Comparable<E>> void sort2(E[] nums) {
    18. int length = nums.length;
    19. for (int i = 0; i < length; i++) {
    20. //将nums[i]插入到合适的位置
    21. //第一种写法
    22. for (int j = i; j - 1 >= 0; j--) {
    23. if (nums[j].compareTo(nums[j - 1]) < 0) {
    24. E num = nums[j - 1];
    25. nums[j - 1] = nums[j];
    26. nums[j] = num;
    27. }
    28. }
    29. //第二种写法
    30. for (int j = i; j - 1 >= 0 && nums[j].compareTo(nums[j - 1]) < 0; j--) {
    31. E num = nums[j - 1];
    32. nums[j - 1] = nums[j];
    33. nums[j] = num;
    34. }
    35. }
    36. System.out.println(Arrays.toString(nums));
    37. }
    38. public static <E extends Comparable<E>> void sort3(E[] arr) {
    39. for (int i = arr.length - 1; i >= 0; i--) {
    40. // 将 arr[i] 插入到合适的位置
    41. E t = arr[i];
    42. int j;
    43. for (j = i; j + 1 < arr.length && t.compareTo(arr[j + 1]) > 0; j++) {
    44. arr[j] = arr[j + 1];
    45. }
    46. arr[j] = t;
    47. }
    48. }
    49. /**
    50. * 优化后的排序方法
    51. * <p>
    52. * 前面方法都是采用比较一次给相关元素赋值一次,优化后采用位置向后平滑设置值,最后赋值给正在寻找位置插入的值
    53. *
    54. * @param arr 数组
    55. * @param <E> E
    56. */
    57. public static <E extends Comparable<E>> void sort4(E[] arr) {
    58. for (int i = 0; i < arr.length; i++) {
    59. E t = arr[i];
    60. int j;
    61. for (j = i; j - 1 >= 0 && t.compareTo(arr[j - 1]) < 0; j--) {
    62. arr[j] = arr[j - 1];
    63. }
    64. arr[j] = t;
    65. }
    66. System.out.println(Arrays.toString(arr));
    67. }
    68. public static void main(String[] args) {
    69. Integer[] nums = {5, 2, 4, 6, 1, 3};
    70. sort(nums);
    71. sort2(nums);
    72. sort3(nums);
    73. sort4(nums);
    74. }

    go实现:

    1. func main() {
    2. insertionSort([]int{5, 2, 4, 6, 1, 3})
    3. }
    4. func insertionSort(arr []int) {
    5. for i := 0; i < len(arr); i++ {
    6. for j := i; j-1 >= 0 && arr[j] < arr[j-1]; j-- {
    7. a := arr[j-1]
    8. arr[j-1] = arr[j]
    9. arr[j] = a
    10. }
    11. }
    12. fmt.Println(arr)
    13. }

    项目demo