public static void shellSort(int arr[] ){
int j;
int temp;
for (int gap = arr.length/2 ; gap >0; gap/=2) {
for (int i = gap; i <arr.length ; i++) {
//这里的 i=gap就是插入排序的第二个数,j就是第一个位置的数,i之所以是加一也要理解,当gap大于一的时候,i+1就是对其他的分割数组进行排序,当变成i=gap的时候,开始对分割的第一个数组开始继续未完成的插入排序,整个流程就是对每个细分的数组的插入排序。
j=i-gap;
temp=arr[i];
while (j>=0&&temp<arr[j]){
arr[j+gap]=arr[j];
j-=gap;
}
arr[j+gap]=temp;
}
}
}
希尔排序:就是不断分割的插入排序,就很简单,和插入排序一模一样,只是将数组分割
分割之后的排序可以当做一个个的数组进行插入排序。