博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法:希尔排序(Shell Sort)
阅读量:4563 次
发布时间:2019-06-08

本文共 1425 字,大约阅读时间需要 4 分钟。

背景

在三种简单的排序算法中(冒泡、选择和插入)插入排序的算法最好,不过插入过程可能需要进行大量的移动,如何尽可能少的移动元素呢?希尔排序正是基于对这个问题的思考而想出来的,考虑到希尔排序对已排序数组的排序效率尤为好(接近O(n)),因此希尔排序会先按照较大的间隔,对间隔的元素进行插入排序,然后将间隔缩小重复上述过程,直到间隔为 1。

实现

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace DataStuctureStudy.Sorts 8 { 9     class ShellSort10     {11         public static void Sort(int[] items)12         {13             var h = 1;14             while (h <= (items.Length - 1) / 3)15             {16                 h = 3 * h + 1;17             }18 19             // 对间隔为 h 的元素进行排序,如:(0,h,2h)、(1,h + 1,2h + 1)。20             while (h >= 1)21             {22                 // 将 outer 对应的元素按照插入排序的算法(间隔为 h)插入到指定的位置。23                 // h 之前的元素都是已排序的。24                 for (var outer = h; outer < items.Length; outer++)25                 {26                     var temp = items[outer];27                     var inner = outer;28                     while (inner >= h && items[inner - h] > temp) // 闲了得思考一下:不变量和 while。29                     {30                         items[inner] = items[inner - h];31                         inner = inner - h;32                     }33                     items[inner] = temp;34                 }35                 h = (h - 1) / 3;36             }37         }38     }39 }

备注

间隔的选择是一个关键因素,这里我选择了一个大家经常使用的算法。

 

转载于:https://www.cnblogs.com/happyframework/p/3486938.html

你可能感兴趣的文章
【HAOI2006】旅行(并查集暴力)
查看>>
css实现文本超出部分省略号显示
查看>>
留言板
查看>>
vue-router组件状态刷新消失的问题
查看>>
Android UI开发第十四篇——可以移动的悬浮框
查看>>
java8的一些用法
查看>>
(十)Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
查看>>
2018-11-19站立会议内容
查看>>
STM32 通用定时器相关寄存器
查看>>
【题解】1621. 未命名
查看>>
字符串加密算法
查看>>
Oracle的实例恢复解析
查看>>
UICollectionView cellForItemAt 不被调用
查看>>
巧用网盘托管私人Git项目
查看>>
python全栈脱产第19天------常用模块---shelve模块、xml模块、configparser模块、hashlib模块...
查看>>
[LeetCode] House Robber
查看>>
virtualbox中kali虚拟机安装增强功能
查看>>
java生成六位验证码
查看>>
iOS的MVP设计模式
查看>>
stringstream
查看>>