方法
public static void sortThr(List<Integer> list, List<Integer> listD) {
int length = list.size();
int tem = 0;
int j = 0;
for (Integer d : listD) {
for (int i = 0; i < length - d; i++) {
tem = list.get(i+d);
if (tem < list.get(i)) {
for (j = i + d; j-d >= 0 && tem < list.get(j-d); j -= d) {
list.set(j, list.get(j - d));
}
list.set(j, tem);
}
}
}
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(0, 8);
list.add(1, 9);
list.add(2, 1);
list.add(3, 7);
list.add(4, 2);
list.add(5, 3);
list.add(6, 5);
list.add(7, 4);
list.add(8, 6);
list.add(9, 55);
list.add(10, 6);
list.add(11, 7);
list.add(12, 8);
list.add(13, 34);
list.add(14, 33);
list.add(15, 22);
list.add(16, 35);
List<Integer> listD = new ArrayList<>();
/* listD.add(0, 5);
listD.add(1, 2);
listD.add(2, 1);*/
listD.add(0, 1);
listD.add(1, 2);
listD.add(2, 1);
System.out.println("希尔排序:");
System.out.println("排序前:");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
xiErSortTwo(list, listD);
System.out.println("排序后:");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
}