算法原理:将待排序记录分成若干子序列分别进行直接插入排序,当整个序列基本有序时再全体进行一次插入排序。
算法优点:直接插入排序性能特点是在待排序记录规模较小、基本有序时排序效率较高,所以希尔排序就是在规模较大时将记录分割成较小的块用插入排序获得较高的效率,当块越来越小整个序列也变得更有序时对整体进行插入排序也能获得较高的效率。
算法缺点:在分割合并过程中相等大小的元素无法保证初始的相对位置,所以该算法不稳定。
实现:`
import java.util.*;
public final class Test {
public static void printf(int []a)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
public static void shellSort(int[]a)
{
int d=a.length/2;//缩小增量
while (d>0)
{
for(int i=d;i<a.length;i++)//对每组进行插入排序
{
int j=i;
int tem=a[i];
while (j-d>=0&&tem<a[j-d])
{
a[j]=a[j-d];
j=j-d;
}
a[j]=tem;
}
System.out.print("d="+d+" ");
printf(a);
System.out.print("\n");
d=d/2;
}
}
public static void main(String[]args)
{
int[]test={1,2,6,8,4,5,7,9,3};
shellSort(test);
}
}