基本思想
在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。
初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;直至增量为1,此时数据序列基本有序,最后进行插入排序。
过程
代码
public class Main{
public static void main(String[] args) {
int[] arr = new int[]{42,20,17,13,28,14,23,15};
shell_sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void shell_sort(int[] array){
int temp=0;
int incre = array.length;
while(true){
//进行分组
incre = incre/2;
for(int k=0;k<incre;k++){
for (int i=k+incre;i<array.length;i=i+incre){
//组内进行排序
for(int j=i;j>k;j=j-incre){
if(array[j]<array[j-1]){
temp = array[j-incre];
array[j-incre]=array[j];
array[j]=temp;
}else{
break;
}
}
}
}
if(incre ==1){
break;
}
}
}
}