Carson带你学数据结构:希尔排序,复杂度最高的排序算法
2023-04-18 12:31:26 时间
目录
1. 简介
- 也称:缩小增量 排序,属于 内排序算法中 的 插入排序类别
- 是对 直接插入排序算法 的优化和升级
2. 算法原理
3. 算法示意图
步骤1:初始状态
步骤2:跳跃分割 & 排序
4. 算法实现
public class ShellSort {
/**
* 希尔排序
*/
public static void shellSort(int[] srcArray) {
int j = 0;
int temp = 0;
// 增量序列值 计算公式 = 前1个增量序列值 / 2,直到增量序列值 = 1为止
// 第1个值 = 初始值 = 序列长度 / 2
for (int increment = srcArray.length / 2; increment > 0; increment /= 2) {
// 根据增量值选取子序列
for (int i = increment; i < srcArray.length; i++) {
temp = srcArray[i];
// 对子序列执行直接插入排序,即 循环两两比较子序列的值
for (j = i - increment; j >= 0; j -= increment) {
if (temp < srcArray[j]) {
// 将小的元素放到前面、大的元素放到后面
srcArray[j + increment] = srcArray[j];
} else {
break;
}
}
srcArray[j + increment] = temp;
}
// 输出 根据增量值排序后的序列
System.out.println("增量值为:" + increment + ",排序结果如下:");
for (int a = 0; a < srcArray.length; a++) {
System.out.println(srcArray[a]);
}
}
}
/**
* 执行 希尔排序
*/
public static void main(String[] args) {
// 定义待排序数列
int[] src = new int[]{ 4, 3, 6, 2, 7, 1, 5, 8 };
// 输出结果
shellSort(src);
}
}
测试结果
增量值为:4,排序结果如下:
4
1
5
2
7
3
6
8
增量值为:2,排序结果如下:
4
1
5
2
6
3
7
8
增量值为:1,排序结果如下:
1
2
3
4
5
6
7
8
Demo
地址:Carson_Ho的Github地址:希尔排序
5. 性能分析
以下将分析算法的性能:时间复杂度、空间复杂度、稳定性
Carson带你学数据结构系列文章: Carson带你学数据:线性表-数组、链表 Carson带你学数据:特殊的线性表-栈、队列 Carson带你学数据:串 Carson带你学数据:树 Carson带你学数据:二叉树 Carson带你学数据:图 Carson带你学数据:查找
相关文章
- 2022杭州云栖大会定档11月3日:70+论坛和4万平科技展 即日起免费预约
- 如何使用边缘计算提高可持续性?
- 专家视点:如何战胜边缘计算挑战?
- 边缘计算优势有哪些
- 数据上云的一些槽点,你Get到了吗?
- 多机房该如何部署?数据如何同步?
- 从大厂挖来的架构师,Kafka参数调优做的那叫一个优雅,学到了
- Kafka为何要设计缓冲池机制?初看一脸懵逼,看懂直接跪下
- 工业领域的四个边缘计算用例
- 图解 Kafka 源码实现机制之客户端缓存架构
- 边缘计算与物联网的未来
- 为什么边缘计算和人工智能策略必须互补
- 有了 IP 地址,为什么还要用 MAC 地址?
- 云无关硬件如何成为物联网的未来
- 为什么构建一个外部数据产品这么难?
- 报告:全球 5G 移动数据流量爆炸式增长
- 美国防部召集微软研究实用规模量子计算 意在抢占全球领导地位
- 腾讯云数据库自研内核全新升级 新架构比原先性能提升20%
- 如何克服多云管理的挑战?
- 一文带你了解什么是光网络?