首先先来简单的插入排序这是基础。
```Java
public class Main {
public static void main(String[] args) {
int [] arr = {3,8,7,11,2,9,5,6};
int j ;
for(int i =1;i<arr.length;i++){
int key =arr[i];
for ( j = i-1; j >=0 ; j--) {
if (key <arr[j]){
arr[j+1] =arr[j];
}else{
break;
}
}
arr[j+1] =key;
}
for (int i =0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
```
而希尔排序就是在插入排序的基础上进行的改良。
希尔排序是把记录按下标的增量进行分组,然后再用直接插入排序进行算法排序,当增量减少到1的时候就分成一组了,排序也就完成了。
```Java
import java.util.Arrays;
public class Main {
public static void sort(int[] a){
int h = 1;
while(h<a.length/2){
h = h*2+1;
}
while(h>=1){//h=7,3,1
for(int i = h;i<a.length;i++){
for(int j = i;j>=h;j-=h){
if(a[j-h]>a[j]){
int temp = a[j-h];
a[j-h] = a[j];
a[j] = temp;
}else{
break;
}
}
}
h/=2;
}
}
public static void main(String[] args) {
int[] a = {6,8,5,4,3,9,2,1,7};
sort(a);
System.out.println(Arrays.toString(a));
}
}
```