排序算法之初阶——插入排序

适用场景:

  与选择排序不同,插入排序的时间和初始输入的顺序有关,如果数据接近有序,那么它的时间会很快。

算法思想:

  和选择排序有着相似的地方,同样分为两部分,在左边这部分是已经有序的元素,右边是无序的,每次从右边拿出一个数据放到左边,找到这个数合适的位置将其插入,且有序的元素集合的长度加一,如往复,将所有的元素都完成排序。

特点:

  运行时间和输入有关: 

     如果输入的数据大体上是有序的,那么它的效率是比较高的。

代码实现:

    /*
     * 排序算法之选择排序 每次选择一个最小的数和当前的未排序的数交换位置,直到最后一个
     */
    // 一个排序的标准模板:
    public void sort(double[] a) {
        for (int i = 0; i < a.length; i++){
            for (int j = i; j > 0 && less(a[j],a[j-1]) ; j--) {
                exch(a, j, j-1);
            }
        }

    }

    // 比较两个数组
    private static boolean less(double a, double a2) {
        // 如果第一个数小于第二个数就会返回true
        return a - a2 <= 0;
    }

    // 交换数组中的两个数
    private void exch(double[] a, int i, int j) {
        double t = a[i];
        a[i] = a[j];
        a[j] = t;
    }

    // 显示数组
    private void show(double[] a) {
        for (int i = 0; i < a.length; i++) {
            StdOut.print(a[i] + "\t");
        }
    }

    // 判断数组是否是有序的
    public static boolean isSort(int[] a) {
        for (int i = 0; i < a.length - 1; i++) {
            if (a[i] > a[i + 1])
                return true;

        }
        return false;
    }

}
 

 

猜你喜欢

转载自www.cnblogs.com/duheng-biu/p/9755149.html