package MySort;
public class ShellSort {
public static void main(String[] args){
//分成段 每个段进行插入排序
int[] R={49,38,65,97,76,13,27,49,55,04};
ShellSort ss=new ShellSort();
int[] dk={5,3,1};
ss.shellSort(R,dk);
for(int i=0;i<R.length;i++){
System.out.println(R[i]);
}
}
public void shellSort(int[] R,int[] dk){
for(int x=0;x<dk.length;x++){
insertSort2(R,dk[x]);
}
//根据增量序列来分段
}
public void insertSort1(int[] R,int d){
for(int i=d;i<R.length;i++){//保证不越界
if(R[i]<R[i-d]){//如果“<”,则证明该元素小于该有序段的最后一个元素,需要进行插入
int temp=R[i];//需要将该要插入的元素暂存,以便移动
int j=i;//从该元素向前查找要插入的位置
while(j>=d&&temp<R[j-d]){//每隔d个元素进行比较
R[j]=R[j-d];
j=j-d;
}
R[j]=temp;//把元素插入到合适的位置
}
}//随着i的增长,有序段的长度也在增长
}
public void insertSort2(int[] R,int d){
for(int i=d+1;i<=R.length;i++){
if(R[i-1]<R[i-d-1]){
int temp=R[i-1];
int j=i-d-1;
while(j>=d-1&&temp<R[j]){
R[j+d]=R[j];
j=j-d;
}
R[j+d]=temp;
}
}//类似于书上的做法
}
}