
排序——插入排序:直接插入排序、希尔排序
发布日期:2021-05-14 16:39:06
浏览次数:15
分类:精选文章
本文共 1856 字,大约阅读时间需要 6 分钟。
排序
1. 直接插入排序
直接插入排序是一种经典的稳定排序算法,适合大部分有序的数据集。插入排序的基本思想是将每个元素插入一个有序的子序列中,从而将整个数组排序。
时间复杂度
- 最坏情况(数据无序):O(n²)
- 最好情况(数据有序):O(n)
- 空间复杂度:O(1)
稳定性
直接插入排序是稳定排序算法,因为处理相等的元素时不会改变它们的相对顺序。
代码实现
public class DirectInsertSort { public static void insertSort(int[] array) { for (int i = 1; i < array.length; i++) { int temp = array[i]; int j = i - 1; while (j >= 0) { if (temp < array[j]) { array[j + 1] = array[j]; } else { break; } j--; } array[j + 1] = temp; } } public static void main(String[] args) { int[] array = {10, 3, 2, 7, 19, 78, 65, 127}; System.out.println(Arrays.toString(array)); insertSort(array); System.out.println(Arrays.toString(array)); }}
2. 希尔排序(分组插排)
希尔排序是直接插入排序的优化版本,将数组分成若干个子序列进行插入,每个子序列的长度由一个增量序列决定。
优化条件
- 增量序列中的值没有其他公因子。
- 最后一个增量值必须是1。
时间复杂度
- 最坏情况:O(n²)
- 空间复杂度:O(1)
稳定性
希尔排序是不稳定排序算法,在处理相同的元素时可能会改变它们的相对顺序。
代码实现
public class XiErSort { public static void shell(int[] array, int gap) { for (int i = 0; i < array.length; i++) { int temp = array[i]; int j = i - gap; while (j >= 0) { if (array[j] > temp) { array[j + gap] = array[j]; } else { break; } j--; } array[j + gap] = temp; } } public static void shellSort(int[] array) { int[] drr = {5, 3, 1}; for (int i = 0; i < drr.length; i++) { shell(array, drr[i]); } } public static void main(String[] args) { int[] array = {10, 7, 5, 6, 90, 32}; shellSort(array); System.out.println(Arrays.toString(array)); }}
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年05月04日 18时17分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2019-03-06
httprunner学习23-加解密
2019-03-06
有道云笔记 同步到我的博客园
2019-03-06
李笑来必读书籍整理
2019-03-06
http头部 Expect
2019-03-06
Hadoop(十六)之使用Combiner优化MapReduce
2019-03-06
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2019-03-06
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
IOS开发Swift笔记16-错误处理
2019-03-07
flume使用中的一些常见错误解决办法 (地址已经使用)
2019-03-07
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
张一鸣:创业7年,我经历的5件事
2019-03-07
git拉取远程指定分支代码
2019-03-07
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07