package com.edu.hpu.sort.insert.shell;
import java.util.Arrays;
import com.edu.hpu.sort.Sort;
public class ShellSort extends Sort {
@Override
public int[] doSort(int[] arr) {
int len = arr.length;
// 所有的步长可能性(首次为数组长的一半,接下来每次为上一次的一半)
for (int gap = len / 2; gap > 0; gap /= 2) {
// 将步长中的所有元素进行插入排序
for(int w = 0; w < gap; w++){
// 步长为gap的插入排序
// 对照插入排序
/*
* for(int i = p + 1; i < r; i++){
* int key = arr[i];
* int j = i - 1;
* while(j >= 0 && arr[j] > key) {
* arr[j + 1] = arr[j];
* j--;
* }
* arr[j + 1] = key;
* }
*/
for (int i = gap + w; i < len; i += gap) {
// 插入排序
int key = arr[i];
int j = i - gap;
while (j >= 0 && arr[j] > key) {
arr[j + gap] = arr[j];
j -= gap;
}
arr[j + gap] = key;
}
}
System.out.println(Arrays.toString(arr));
}
return arr;
}
public static void main(String[] args) {
Sort sort = new ShellSort();
sort.printOrder(new int[] {100, 201, 999, 4, 1, 3, 2, 16, 9, 100, 194, 8, 7, 0, 90 });
}
}