插入排序学习笔记

public class SortDemo {
    public static void main(String[] args) {
        int[] a = creatInt2();

        insertionSort(a);

    }

    // 正序
    private static int[] creatInt() {
        int[] a = new int[100001];
        for (int i = 0; i < 100001; i++) {
            a[i] = i;
        }
        return a;
        // 开始时间:1525762744961,结束时间:1525762744967,用了多长时间:6
    }

    // 反序
    private static int[] creatInt2() {
        int[] a = new int[100001];
        for (int i = 100000, j = 0; j < 100001; i--, j++) {
            a[j] = i;
        }
        return a;
        // 开始时间:1525762726900,结束时间:1525762732508,用了多长时间:5608
    }

    // 插入排序
    public static void insertionSort(int[] a) {
        Date d = new Date();
        long start = d.getTime();
        int j;
        for (int p = 1; p < a.length; p++) {
            Integer temp = a[p];
            for (j = p; j > 0 && temp.compareTo(a[j - 1]) < 0; j--)
                a[j] = a[j - 1]; // 如果之前的数比后面的数大,就将之前的数右移
                                    // 在极端条件下(反序),每个都会迭代p次,O(N^2),在理想状态下(正序)O(N)
            a[j] = temp;// 将要比较的数插入到适合它的位置
        }
        /*
         * for (int i : a) { System.out.print(i+","); } System.out.println();
         */
        Date d2 = new Date();
        long end = d2.getTime();
        System.out.println("开始时间:" + start + ",结束时间:" + end + ",用了多长时间:" + (end - start));

    }
}

猜你喜欢

转载自blog.csdn.net/bushanyantanzhe/article/details/80239926