一、减治法在排序算法中的应用
插入排序:时间复杂度O(n^2),虽然和选择、冒泡在最坏的情况下时间复杂度相同,但是插排平均性能在比自身的最差性能快一倍,所以相比选择、冒泡来说,插排要领先于二者。
public class Main {public static void main(String[] args) {int[] a = {89, 45, 68, 90, 29, 34, 17};for (int i = 1; i < a.length; i++) {int v = a[i];int j = i-1;/*** 在前i-1个有序元素中找到一个合适位置,将a[i]插入* */while (j >= 0 && a[j] > v) {a[j+1] = a[j];j -= 1;}a[j+1] = v;}for (int i = 0; i < a.length; i++) {System.out.print(a[i] + " ");}}
}
发现问题:对于有序数组这样的最优输入来说,快排的性能非常好,但是这种情况毕竟没有太大的实际意义。而当大数据量测试的时候,快排总是不尽如人意。
优化思路:基于快排的一种拓展算法----Shell(希尔)排序