这个是尚硅谷Java数据结构课上的思路。这个地方老师讲的不好。分组后每组的交换要考虑到组中最后一个元素与同组其他元素的比较,所以最里面的for循环才这样写,而不是就执行一次,这个for循环是精髓。
package DataStructures.sort;
import java.lang.reflect.Array;
import java.util.Arrays;
public class ShellSort {
public static void main(String[] args) {
int[] array = {8, 9, 1, 7, 2, 3, 5, 4, 6, 0, 10};
shell(array);
System.out.println(Arrays.toString(array));
}
public static void shell(int[] array) {
int temp = 0;
for (int page = array.length / 2; page > 0; page = page / 2) {
for (int i = page; i < array.length; i++) {
//这个for循环是重点,这里让j=j-page是为了让最后的元素
//和该组前面的元素都进行比较
for (int j = i - page; j >= 0; j = j - page) {
if (array[j] > array[j + page]) {
temp = array[j];
array[j] = array[j + page];
array[j + page] = temp;
}
}
}
}
}
}



