希尔排序大概是众多常见排序算法中唯一一个不是耿直名字的了
(这就是我还不会希尔排序的理由?
一句话概括希尔排序!
插入排序Plus版本!
它其实就是先给数组分隔成n组来进行插入排序
最后分成arr.length组时就不需要进行插入排序了~会快一点!
代码实现
import java.util.Arrays;
public class 希尔排序 {
public static void main(String[] args) {
int[] a = {2,10,8,22,34,5,12,28,21,11};
int n = a.length;
for (int gap = n / 2; gap > 0; gap /=2)//以二分步长为例
{
for (int i = gap; i < n; i++)//i = gap~n-1
{
int temp = a[i];
for (int j = i - gap; j >= 0; j = j - gap)//直接插入排序
{
if (temp < a[j]) // 用原始a[i](temp)依次与之前数据比较,插入合适位置
{
a[j + gap] = a[j];//往后移
a[j] = temp;
}
else
break;
}
}
}
System.out.println(Arrays.toString(a));
}
}