这篇用到直接插入排序,建议先阅读上一篇:直接插入排序算法
希尔排序(Shell's Sort)是插入排序的一种 “缩小增量排序”,直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。
希尔排序是把记录按下标的一定分量分组,对每组使用 直接插入算法排序 ;随着增量逐渐减小,每组包含的关键词越来越多,当增量减至 1 的时候,整个文件恰被分成一组,算法便终止。
java实现:
public static void Shell_Sort(int[] arr)
{
int increment = arr.length;
int i, j, temp;
do {
increment = increment/3 + 1;
for(i = increment + 1; i < arr.length; i ++)
{
if(arr[i] < arr[i-increment])
{
temp = arr[i];
for(j = i - increment; j > 0 && arr[j] > temp; j-=increment) //大于temp(arr[i])的后移
arr[j+increment] = arr[j];
arr[j+increment] = temp; //将arr[i]插入
}
}
} while (increment > 1);
}
这里的increment【也就是增量选取非常关键】,可究竟应该选取什么样的增量才是最好,目前还是一个数学难题,迄今还没有
人找到一种最好的增量序列。希尔排序时间复杂度为 O( n^(3/2) )。需要注意的是,增量序列的最后一个增量值必须等于1
才行。