详细步骤在注释里
public class ShellSort {
/*
* 希尔排序,插入排序的变种,比插入排序效率更高
* 它是缩小增量的插入排序,或者说插入排序是增量为一的希尔排序
* 实现步骤:
* 1)指定初始增量(一般为数组长度的一半)
* 2)从第一个元素开始,按照增量,将数组划分成一个个组
* 3)对每个组运用插入排序
* 4)重复步骤1-3,每趟的增量为上一次增量的一半,直到增量为1为止
*
*
* tips:
* 因为是插入排序的变种,所以可以先把插入排序写出来,
* 按照上述步骤,改造成希尔
* */
public static void shellSort(int [] arr)
{
//次数
for(int interval=arr.length/2;interval>0;interval=interval/2)
{
//先把插入排序写出来,然后改一改
for(int i=interval;i<arr.length;i++)
{
//希尔:从第一个增量指向的元素开始,把后面的元素往前进行插入排序
//插入:从第二个元素开始,往第一个元素进行插入排序
int x=arr[i];
int j=i-interval;
while(j>-1&&x<arr[j])
{
arr[j+interval]=arr[j];
j-=interval;
}
arr[j+interval]=x;
}
}
}
public static void main(String[] args) {
int arr[]= {2,1,5,4,6,7,9,8,8};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
}
插入排序实际上是增量为1的希尔排序,可以先把插入排序的代码敲出来,改改增量就行~