zoukankan      html  css  js  c++  java
  • 插入排序

    使用场景

    插入排序所需时间取决于元素的初始顺序。例如:对一个很大的且其中已经有序的(或者接近有序)的数组进行排序将会比随机顺序的数组或者逆序的数组进行排序要快得多。

    复杂度分析

    对于随机排列的长度为N且主键不重复的数组,平均情况下插入排序需要N*N/4次比较以及N*N/4次交换。最坏情况下需要N*N/2次比较和N*N/2次交换,最好情况下需要N-1次比较和0次交换。

    代码实现

    public static void insertSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            for (int j = i; j > 0 && arr[j] < arr[j-1]; j--) {
                int t = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = t;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
    

    要大幅度提高排序的速度并不难,只需要在内层循环中较大的元素向右移动而不总是交换位置,这样访问数组的次数就能减半。

    public static void insertSort2(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int t = arr[i];
            int j;
            for (j = i; j > 0 && arr[j - 1] > t; j--) {
                arr[j] = arr[j - 1];
            }
            arr[j] = t;
        }
        System.out.println(Arrays.toString(arr));
    }
    
  • 相关阅读:
    联赛前第五阶段总结
    陶陶摘苹果 —— 线段树维护单调栈
    联赛前第三阶段总结
    联赛前第四阶段总结
    [NOIP
    超级跳马 —— 矩阵快速幂优化DP
    我的博客园美化
    Wedding —— 2-SAT
    C++运算符优先级
    water——小根堆+BFS
  • 原文地址:https://www.cnblogs.com/liuzhulin/p/14586625.html
Copyright © 2011-2022 走看看