Carson带你学数据结构:希尔排序,复杂度最高的排序算法
Posted Carson带你学Android
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Carson带你学数据结构:希尔排序,复杂度最高的排序算法相关的知识,希望对你有一定的参考价值。
目录
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带你学数据:查找
欢迎关注Carson_Ho的CSDN博客 !
博客链接:https://carsonho.blog.csdn.net/
请点赞!因为你的鼓励是我写作的最大动力!
以上是关于Carson带你学数据结构:希尔排序,复杂度最高的排序算法的主要内容,如果未能解决你的问题,请参考以下文章