1、先取一个正整数d1<n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止(本例增量序列为:5,3,1)
2、代码
package InsertSort;
import java.util.Arrays;
public class ShellSort {
/**
*
* @param data 待排序序列
* @param dlta 增量序列
*/
public static int[] shellSort(int[] data,int[] dlta){
for(int t=0;t<dlta.length;t++){
data=shellInsert(data,dlta[t]);
}
System.out.println(Arrays.toString(data));
return data;
}
public static int[] shellInsert(int[] data,int dk){
for(int i=dk;i<data.length;i++){
int tmp=data[i];
int j=i;
if(data[i]<data[i-dk]){
for(;j>=dk&&tmp<data[j-dk];j-=dk){
data[j]=data[j-dk];
}
data[j]=tmp;
}
}
System.out.println(Arrays.toString(data));
return data;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int data[]={49,38,65,97,76,13,27,49,55,4};
int dlta[]= {5,3,1};
shellSort(data,dlta);
}
}
3、运行结果
[13, 27, 49, 55, 4, 49, 38, 65, 97, 76]
[13, 4, 49, 38, 27, 49, 55, 65, 97, 76]
[4, 13, 27, 38, 49, 49, 55, 65, 76, 97]
[4, 13, 27, 38, 49, 49, 55, 65, 76, 97]