java算法 -- 希尔排序
2023-09-14 09:00:30 时间
java算法 -- 希尔排序
基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列
中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
- 操作方法:
选择一个增量序列 t1,t2,…,tk,其中 ti>tj,tk=1; - 按增量序列个数 k,对序列进行 k 趟排序;
- 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进
行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长
度。
public class HillSortTest {
public static void main(String[] args) {
int[] array = {1, 2, 5, 41, 7, 11, 13, 17, 59, 19, 23, 29, 31, 37, 43, 47, 53};
int[] hillSortArrays = hillSort(array);
for (int s : hillSortArrays) {
System.out.print(s + " ");
}
}
/**
* 希尔排序
*
* @param arrays 要排序的数组
* @return 排序后的数组
*/
private static int[] hillSort(int[] arrays) {
int temp;
//默认步长为数组长度除以2
int step = arrays.length;
do {
//每次的step都是前一次的一半
step = step / 2;
//确定分组数
for (int i = 0; i < step; i++) {
//对分组数据进行直接插入排序
for (int j = i + step; j < arrays.length; j = j + step) {
temp = arrays[j];
int k;
for (k = j - step; k >= 0; k = k - step) {
//step 步数前后数据对比并交换
if (arrays[k] > temp) {
arrays[k + step] = arrays[k];
} else {
break;
}
}
arrays[k + step] = temp;
}
}
} while (step != 1);
return arrays;
}
}
相关文章
- 常用排序算法(Java描述)
- Java实现 蓝桥杯 算法训练VIP 报数(暴力+数学)约瑟夫环问题
- Java实现 蓝桥杯算法提高 求最大值
- Java实现 LeetCode 561 数组拆分 I(通过排序算法改写PS:难搞)
- Java实现蓝桥杯VIP 算法训练 P0504
- java算法集训代码填空题练习3
- java实现 蓝桥杯 算法提高 盾神与条状项链
- Java实现 蓝桥杯VIP 算法提高 3-2字符串输入输出函数
- Java实现 蓝桥杯VIP 算法提高 快速幂
- Java实现 蓝桥杯VIP 算法训练 平方计算
- Java实现 蓝桥杯VIP 算法训练 二元函数
- Java实现 蓝桥杯 算法训练 排序
- Java实现 蓝桥杯 算法训练 排序
- Java实现 蓝桥杯 算法训练 Anagrams问题
- Java实现蓝桥杯 算法提高 线段和点
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- java算法 -- 希尔排序
- 算法--java实现将数字转换成人民币大写(迅雷面试题)
- 用Java来写常见的排序算法
- java算法 -- 归并排序
- 【学习总结】java数据结构和算法-第三章-稀疏数组和队列
- Java算法--冒泡排序
- [数据结构与算法] 2.快速排序 Java 实现
- 算法9-5:最大流算法的Java代码
- Java中的六种经典比较排序算法:代码实现全解析
- 【java】Java 继承