分析
又叫缩小增量排序。
- 将待排序列,分割成若干子序列进行直接插入排序
- 序列基本有序时,对全体进行直接插入排序
方法
- 选择增量序列,t1,t2,…,tk,序列依次递减,tk=1
- 按增量序列个数k,进行k次排序
- 根据增量ti,对子序列进行直接插入排序。当增量为1时,整个序列作为一个表处理,得到排序后的数组
代码
public static void ShellInsertSort(int[] array, int dk) {
for (int i = dk; i < array.length; i++) {
// 如果满足插入条件
if (array[i] < array[i - dk]) {
int j = i - dk;
// 存储待排序元素
int x = array[i];
// 后移一个元素
array[i] = array[i - dk];
// 查找有序表的插入位置
for (; j >= 0 && x < array[j]; j -= dk) {
array[j + dk] = array[j];
}
// 插入到正确位置
array[j + dk] = x;
}
}
}
public static void shellSort(int array[]) {
int dk = array.length / 2;
while (dk >= 1) {
ShellInsertSort(array, dk);
common.print(array);
dk = dk / 2;
}
}
本文介绍了一种高效的排序算法——希尔排序,也称为缩小增量排序。希尔排序通过将原始序列分割成多个子序列并分别进行直接插入排序来提升效率。文章详细解释了希尔排序的工作原理,并提供了一个具体的Java代码实现示例。
279

被折叠的 条评论
为什么被折叠?



