//希尔排序
public class ShellSort {
public static void main(String[] args) {
ShellSort shellSort = new ShellSort();
int[] arr = shellSort
.shellSort(new int[] { 1, 4, 7, 8, 5, 2, 3, 6, 9, 0, 11, 14, 17, 18, 15, 12, 13, 16, 19, 10, 24 });
System.out.println("===============================");
for (int i : arr) {
System.out.println(i);
}
}
private int[] shellSort(int[] arr) {
int p = (arr.length - 1) / 3;// 增量
while (p > 0) {
for (int i = 0; i + p < arr.length; i++) {
insert(arr, i, p);
}
p /= 2;
}
return arr;
}
/**
*
* @param arr 数组
* @param i 数组要排序的开始下标
* @param p 步长
*/
private void insert(int[] arr, int i, int p) {
for (int j = i; j < arr.length; j += p) {
// 要插入的值
int val = arr[j];
// 插入位置
int in = j;
for (int k = j - p; k >= 0; k -= p) {
if (arr[k] < val) {
arr[k + p] = arr[k];
in = k;
} else {
break;
}
}
arr[in] = val;
}
}
}
请大家指点