希尔排序
缩小增量排序,第一种突破了O(n^2)的一种排序算法,时间复杂度为:O(n ^3/2)。
是插入排序的一种,不断的缩小数据间隔,则最终一次退化为直接插入排序。
SortSequence BubbleSort 请见简单排序
package per.lihao.sort.complexsort;
import per.lihao.sort.SortSequence;
import per.lihao.sort.simplesort.BubbleSort;
/**
* 希尔排序 又叫做缩小增量排序,是插入排序的一种
* 思路是:对数据利用增量进行分组插入排序,并且不断地缩小增量到1,最后执行一次直接插入排序
* 由于之前已经经历过多次分组插入排序,整体序列已经有序,这样在最后排序时效率较高
* 是第一种突破了O(n^2)的一种排序算法,时间复杂度为:O(n^3/2)
* 关于增量的取法:
* 增量increment的取法有各种方案。
* 最初shell提出取increment=n/2向下取整,increment=increment/2向下取整,直到increment=1。
* 但由于直到最后一步,在奇数位置的元素才会与偶数位置的元素进行比较,这样使用这个序列的效率会很低。
* 后来Knuth提出取increment=n/3向下取整+1.还有人提出都取奇数为好,也有人提出increment互质为好。
* 应用不同的序列会使希尔排序算法的性能有很大的差异
* Time: 2018/12/7 9:47
*/
public class ShellSort {
public static int[] sort(int[] array){
return sort(array,true)