基本算法(04) - 希尔排序
希尔排序(Shell's Sort)
1959年Shell发明,第一个突破O()的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:
- 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;
- 按增量序列个数k,对序列进行k趟排序;
- 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m的子序列,分别对各子表进行直接插入排序。仅增量因子为1时,整个序列作为一个表来处理,表长度即为整个序列的长度。
Demo(Scala)
def shellSort(array: Array[Int]):Array[Int] = { // 如果长度不足,不需要排序 if (array.length <= 1) { array } else { // 初始间隔为序列中所有数据的一半 var gap = array.length / 2 // 逐渐减少增量,每次钆喷值减半,向下取整 while (gap > 0){ // 依次获取增量序列 for ( begin <- 0 until gap){ var nextIndex = begin + gap // 获取所有分组序列的指 while ( nextIndex < array.length){ val nextValue = array(nextIndex) // 下一个值 var k = nextIndex - gap // 上一个下标 // 对分组序列进行插入排序 while ( k >= 0 && array(k) >= nextValue){ array(k+gap) = array(k) // 将小的数向前移动 k -= gap // 向前移动间隔位数 } array(k + gap) = nextValue nextIndex += gap } } gap = gap / 2 } } array }
本文来自博客园,作者:duchaoqun,转载请注明原文链接:https://www.cnblogs.com/duchaoqun/p/12710281.html
分类:
Other
标签:
arithmetic
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?