希尔排序算法
2023-03-07 09:09:09 时间
什么是希尔排序?
希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。
希尔排序原理
- 选定一个增量h,按照增长量h作为数据分组的依据,对数据进行分组;
- 对分好组的每一组数据完成 插入排序;
- 减小增长量,最小减为1,重复第二步操作。
下面是希尔排序算法图示例
关于增长量的确定:
int h=1;
//通过循环来确定分组的最大值
while(h<数组/2){
h=2h+1;
}
//h的减小规则为每次除以2
h=h/2
希尔排序实现代码
public class Shell {
public static void sort(Comparable[] a){
// 确定h值
int h = 1;
while (h=1) {
//首先找到待插入元素
for(int i=h;i+h<=a.length;i++){ //此处是用于控制分组的移动
//将待插入元素插入
for (int j = i;j>=h;j-=h) { //此处是用于控制需要操作插入的数
if(!greater(a[j-h],a[j])){ //待插入数,找到合适的插入位置进行插入
exch(a,j,j-h);
}
}
}
h=h/2; //本轮分组排序已经结束,开始减小分组的值,开始新一轮排序
}
}
// 两数进行比较的函数,返回true表示a>b,反之a<=b
private static boolean greater(Comparable a,Comparable b){
return a.compareTo(b)>0;
}
// 对数组中的两个元素进行交换
private static void exch(Comparable[] a,int i,int j){
Comparable temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
本文共 305 个字数,平均阅读时长 ≈ 1分钟
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的