一、希尔排序
1.1 算法思想
- (1)选择一个步长序列t1,t2,…,tk,其中ti > tj, tk = 1;
- (2)按步长序列个数k,对序列进行k趟排序;
- (3)每趟排序根据对应的步长ti,将待排序序列分隔成若干长度为m的子序列,分别对各子表进行直接插入排序。仅步长因子为1时,整个序列作为一个表来处理,表长度即为整个序列的长度;
示例使用希尔排序数组:
public class InsertSort {
/**
* 希尔排序
*/
public void shellSort(int[] data) {
int j = 0;
int temp = 0;
for (int increment = data.length/2; increment > 0; increment/=2) {
for (int i = increment; i < data.length; i++) {
temp = data[i];
for (j = i; j > increment; j-=increment) {
if (temp < data[j - increment]) {
data[j] = data[j - increment];
} else {
break;
}
}
data[j] = temp;
}
}
}
}