一.算法思想
- 先选定一个小于N的整数gap作为第一增量,然后将所有距离为gap的元素分在同一组,并对每一组的元素进行直接插入排序。然后再取一个比第一增量小的整数作为第二增量,重复上述操作…
- 当增量的大小减到1时,就相当于整个序列被分到一组,进行一次直接插入排序,排序完成。
- 我的理解就是先分组,再进行直接插入排序或折半插入排序,直至步长为一
二.代码实现
package Sort;
import java.util.Arrays;
public class ShellSort {
public static void main(String[] args) {
int[] a = {49, 38, 65, 97, 76, 13, 27, 49};
System.out.println("原始数组为" + Arrays.toString(a));
shellSort(a);
System.out.println("最终排序的结果为" + Arrays.toString(a));
}
public static void shellSort(int[] a){
int gap=a.length;
while (gap>1){
gap=gap/2;
for (int i=0;i<a.length-gap;i++){
int end=i;
int temp=a[end+gap];
while (end>=0){
if(temp<a[end]){
a[end+gap]=a[end];
a[end]=temp;
end=end-gap;
} else {
break;
}
}
}
}
}
}
三.执行结果

四.算法性能
- 时间复杂度:未知
- 空间复杂度:O(1)
- 稳定性:不稳定