算法之希尔排序简介
* 希尔排序是把记录按下标的一定增量分组,
* 对每组使用直接插入排序算法排序;
* 随着增量逐渐减少,每组包含的关键词越来越多,
* 当增量减至1时,整个文件恰被分成一组,算法便终止。
代码参考
/**
* 希尔排序
*
* 希尔排序是把记录按下标的一定增量分组, 对每组使用直接插入排序算法排序; 随着增量逐渐减少,每组包含的关键词越来越多,
* 当增量减至1时,整个文件恰被分成一组,算法便终止。
*
* @author zhang
*
*/
public class ShellSort {
public static void main(String[] args) {
int[] arr = new int[] { 3, 9, 8, 4, 0, 19, 12, 29, 4, 2, 3, 0 };
ShellSortMethod(arr);
System.out.println(Arrays.toString(arr));
}
public static void ShellSortMethod(int[] arr) {
// 外部for 画布的次数
for (int d = arr.length / 2; d > 0; d /= 2) {
// 第二层 for 是根据画布 分组
for (int i = d; i < arr.length; i++) {
// 第三层 for 遍历 根据画布分组后,本组的数据
for (int j = i - d; j >= 0; j -= d) {
// 如果当前元素大于加上布长的那个元素
if (arr[j] > arr[j + d]) {
int temp = arr[j];
arr[j] = arr[j + d];
arr[j + d] = temp;
}
}
}
}
}
}