希尔排序就是按照不同间隔,对序列进行排序,直到间隔步长为1时,排序后,该序列即为升序序列。
一般步长选取序列长度除以2的k次幂,在不同步长下,将序列各组进行插入排序。大大的减少了插入排序的时间复杂度。希尔排序是对插入排序的改进。
public static void xier(int[] nums, int[] s) {
for (int si = 0; si < s.length; si++) { //不同步长排序
int spen = s[si];
for (int col = 0; col < spen; col++) { //不同序列组
for (int i = 0; i < nums.length - spen; i+=spen) { //对不同序列组组内进行插入排序
int temp = nums[i + spen];
int j = i;
for (; j >= 0; j-=spen) {
if (nums[j] > temp) {
nums[j + spen] = nums[j];
}else break;
}
nums[j + spen] = temp;
}
}
}
}