希尔排序(缩小增量排序)(O(nlogn)):根据数组长度的一般来确定每一组的步长,每组内的数据进行插入排序。步长再设置为原来步长的一半,在进行组内插入排序。直至步长缩小为一。缩小为一后,从第一位开始左右比较小左大右尽心微调一遍。
public static void shellSort(int[] arr){
for(int gap = arr.length /2;gap > 0;gap /= 2){
for (int i = gap ;i < arr.length;i++){
// 定义 指针 j : 指向数组当中的每一个元素 默认 j 指向的是该组当中的第一个元素
// j -= gap :这里的 gap 值得是步长
for(int j = i-gap; j>=0; j -= gap){
// 如果当前元素大于加上步长之后的元素,则交换
if(arr[j] > arr[j+gap]){
int temp = arr[j];
arr[j] = arr[j+gap];
arr[j+gap] = temp;
}
}
}
}
}