/** 希爾排序:先取一個小於n的整數d1作為第一個增量,
* 把文件的全部記錄分成(n除以d1)個組。所有距離為d1的倍數的記錄放在同一個組中。
* 先在各組內進行直接插入排序;然后,取第二個增量d2
* 直至所取的增量dt=1(dt
public classShellSort {public static void sort(int[] data) {for (int i = data.length / 2; i > 2; i /= 2) {for (int j = 0; j < i; j++) {
insertSort(data, j, i);
}
}
insertSort(data,0, 1);
}/***@paramdata
*@paramj
*@parami*/
private static void insertSort(int[] data, int start, intinc) {for (int i = start + inc; i < data.length; i +=inc) {for (int j = i; (j >= inc) && (data[j] < data[j - inc]); j -=inc) {
SortTest.swap(data, j, j-inc);
}
}
}
}/** 屬於插入類排序,是將整個無序列分割成若干小的子序列分別進行插入排序
* 排序過程:先取一個正整數d1
* 組內進行直接插入排序;然后取d2
* 初始:d=5 49 38 65 97 76 13 27 49 55 04
* 49 13 |-------------------|
* 38 27 |-------------------|
* 65 49 |-------------------|
* 97 55 |-------------------|
* 76 04 |-------------------|
* 一趟結果 13 27 49 55 04 49 38 65 97 76
* d=3 13 27 49 55 04 49 38 65 97 76
* 13 55 38 76 |------------|------------|------------|
* 27 04 65 |------------|------------|
* 49 49 97 |------------|------------|
* 二趟結果 13 04 49* 38 27 49 55 65 97 76
* d=1 13 04 49 38 27 49 55 65 97 76
* |----|----|----|----|----|----|----|----|----| 三趟結果
* 04 13 27 38 49 49 55 65 76 97*/