实现原理动态图解:
import java.util.Arrays;
public class ShellSort {
public static void shellSortSmallToBig(int[] data) {
int j = 0;
int temp = 0;
int jmp=data.length/2;
for ( jmp = data.length / 2; jmp > 0; jmp /= 2) {
System.out.println("jmp:" + jmp);
for (int i = jmp; i < data.length; i++) {
temp = data[i];
for (j = i - jmp; j >= 0; j -= jmp) {
if (temp < data[j]) {
data[j + jmp] = data[j];//往后移一位
} else {
break;
}
}
data[j + jmp] = temp;//交换位置
}
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + " ");
System.out.println();
}
System.out.println();
}
public static void main(String[] args) {
int[] data = new int[] { 63,92,27,36,45,71,58,7 };
shellSortSmallToBig(data);
System.out.println(Arrays.toString(data));
}
}
输出: