//希尔排序
public class ShellSort {
public void shellSort(int[] data, int left, int right) {
if (left < 0 || right > data.length - 1 || left >= right) {
return;
}
int gap, i, j, temp;
// 用gap不断进行分组
for (gap = (right - left + 1) / 2; gap >= 1; gap /= 2) {
// 对每一组都要进行一次直接插入排序,
// 这里是所有组一起来,比如一共有5组,先排序完5组中的第二个数,再去排序5组中的第三个数。
// 如果是排完第一组再排第二组,会写成4个for
// 循环,现在减少一个,不过循环次数其实是一样的,不知道这样写会不会快一些。
for (i = left + gap; i <= right; i++) {
j = i;
while (j - gap >= left && data[j] < data[j - gap]) {
temp = data[j];
data[j] = data[j - gap];
data[j - gap] = temp;
j = j - gap;
}
}
}
}
}
八大排序算法——希尔排序(二)
最新推荐文章于 2024-09-19 16:32:07 发布