参考文章:https://www.cnblogs.com/chengxiao/p/6104371.html
上面这篇文章写的相当棒!
《算法》中有描述:希尔排序是目前唯一无法准确描述其性能特征的排序算法,也是第一批突破O(n^2)的排序算法,希尔排序基于插入排序,基本思想是对数据进行分组,再进行宏观上的“模糊”调整,最后再“仔细”的微调,完成排序。
这张图就是上面文章中出现的,非常生动:
以java代码描述:
package sort;
/**
* Created by 灵魂都在冒香气的神 on 2018/2/27.
* 希尔排序
*/
public class ShellSort
{
public static void sort(int[] a,int factor)
{
if (factor>a.length)
{
throw new IllegalArgumentException("the factor must smaller than num.length");
}
for (int gap=a.length/factor;gap>0;gap/=factor)
{
for (int i=gap;i<a.length;i++)
{
for (int j=i;j>=gap&&a[j]<a[j-gap];j-=gap)
{
Util.swap(a,j,j-gap);
}
}
}
}
}
十万个数据下的测试结果:
效率已经相当高了,不过还是干不过java内置的Arrays.sort()快排^_^