package sort;
public class ShellSort{
private int[] gap;
public void initGap(){
gap = new int[3];
gap[0] = 3;
gap[1] = 2;
gap[2] = 1;
}
public void sort(int[] data) {
initGap(); // 初始化增量数组
for (int s = 0; s<gap.length; s++) {
int d = gap[s]; // 得到每次增量大小
// 在当前增量d下对每个“隐形子序列”进行插入排序
for (int i=d; i<data.length; i++) {
if (data[i] < data[i-d]) { // 需要调整
int tmp = data[i];
int j;
for (j = i-d; j>=0 && tmp<data[j]; j-=d) // 插入排序实现
data[j+d] = data[j];
data[j+d] = tmp;
}
}
}
}
/**
* 测试
* @param args
*/
public static void main(String args[]) {
ShellSort test = new ShellSort();
int[] data = {70,23,40,10,80,20,90,100,75,60,45};
test.sort(data);
for (int i=0; i<data.length; i++)
System.out.print(data[i]+", ");
}
}