插入排序算法:每次处理一个数,把这个数插入到前面已经排好序的队列中。 arr[0,i) 是有序的队列,arr[i,n) 是无序的队列

    1. public class InsertSort {
    2. public static void main(String[] args) {
    3. Integer[] arr = {4, 6, 5, 3, 2, 1};
    4. sort(arr);
    5. for (int i = 0; i < arr.length; i++) {
    6. System.out.println(arr[i]);
    7. }
    8. //验证选择排序算法的效率 算法复杂度是:O(n*n)
    9. Integer[] dataSize = {10000, 100000};
    10. for (Integer n : dataSize) {
    11. Integer[] arrs = ArrayGenerator.generateRandomArray(n, n);
    12. SortingHelper.sortTest("InsertSort", arrs);
    13. }
    14. }
    15. public static <E extends Comparable<E>> void sort(E[] arr) {
    16. //4 6 3 5 2 1 使用插入排序法进行排序
    17. //3 4 6 5 2 1
    18. //3 4 5 6 2 1
    19. //2 3 4 5 6 1
    20. //1 2 3 4 5 6
    21. //当前位置前后比对 进行替换
    22. for (int i = 0; i < arr.length; i++) {
    23. for (int j = i; j > 0; j--) {
    24. if (arr[j].compareTo(arr[j - 1]) < 0) {
    25. swap(arr, j, j - 1);
    26. } else break;
    27. }
    28. }
    29. }
    30. private static <E extends Comparable<E>> void swap(E[] arr, int i, int j) {
    31. E temp = arr[i];
    32. arr[i] = arr[j];
    33. arr[j] = temp;
    34. }
    35. }

    减少数据替换操作:

    1. public static <E extends Comparable<E>> void sort2(E[] arr) {
    2. for (int i = 0; i < arr.length; i++) {
    3. E temp = arr[i];
    4. int j;
    5. for (j = i; j > 0 && temp.compareTo(arr[j - 1]) < 0; j--) {
    6. arr[j] = arr[j - 1];
    7. }
    8. arr[j] = temp;
    9. }
    10. }