思路
图示
代码
算法
/**
* 希尔排序
*
* @param data
*/
public static void shellOrder(int[] data) {
int step = data.length;
while (step / 2 > 0) {
step = step / 2;
for (int i = step; i < data.length; i++) {
for (int j = i - step; j >= 0; j -= step) {
if (data[j + step] >= data[j]) {
break;
} else {
exchange(data, j, j + step);
}
}
}
}
}
private static void exchange(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
测试
public static void main(String[] args) {
int[] data = {5, 3, 4, 1, 2};
shellOrder(data);
System.out.println(Arrays.toString(data));
}
结果
[1, 2, 3, 4, 5]