概述:听到希尔排序这个名称,心里完全没有任何概念,因为这个名称不能给你提供任何有效的信息。但是它的名字又是那么的特殊,以至于学习过数据结构排序的都知道这种方法的存在。现在我们就来看一下所谓的希尔排序。

希尔排序是一种先进排序的算法,先进排序算法是指时间复杂度比简单排序更进一步的排序算法,除希尔排序之外,还有归并排序,快速排序,堆排序等。它的思想来源于插入排序,只不过是把数组分为若干组分别进行排序。

例如一个数组{49,38,65,97,76,13,27,55,4},首先设置一个增量序列数组{3,2,1},第一步设置gap为3,将数组分为3组,分别是{49,97,27},{38,76,55},{65,13,4},然后分别做插入排序,变为{27,49,97},{38,55,76},{4,13,65},然后再把它们组合起来,变为{27,38,4,49,55,13,97,76,65}。如下所示相同颜色为一组,每组分别进行排序【指插入排序】,然后形成一次排序,图中下面的数据即是一次排序的结果。接着gap改成数组中的第二个元素2,即分为2组,分别是{27,4,55,97,65}和{38,49,13,76},最后进行gap设置为1进行排序,形成有序数组。

时间复杂度:关于希尔排序的时间复杂是一个复杂的问题,它与选取的增量序列数组有关,但是现在尚未有人能够给出一种最好的增量序列方法,涉及到一些数学上尚未解决的难题。

如何选取增量序列:可以有各种取法,但应使增量序列中的值没有除1以外的公因子,并且最后一个增量值应为1.

代码:

public class Shell_Sort {

    static void insertion(int [] a, int d)
{
for(int l = 0; l < d; l++) {
for (int i = d+l; i < a.length; i += d) {
int sen = a[i];
int j = i - d;
for (; j >= 0; j -= d) {
if (a[j] > sen)
a[j + d] = a[j];
else {
break;
}
}
a[j + d] = sen; }
}
for (int n:a)
System.out.print(n+" ");
System.out.println(); } public static void main(String []args)
{
int [] d = {3,2,1};
int [] a = {49,38,65,97,76,13,27,55,4};
for (int k = 0; k < d.length; k++)
{
insertion(a,d[k]);
}
} }

结果:

27 38 4 49 55 13 97 76 65
4 13 27 38 55 49 65 76 97
4 13 27 38 49 55 65 76 97

希尔排序Shell_Sort的更多相关文章

  1. python算法与数据结构-希尔排序算法(35)

    一.希尔排序的介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每 ...

  2. 算法----希尔排序(shell sort)

    在分析插入排序(插入排序算法实现)的算法性能的过程时知道.当数组规模较小或者存在较多的有序子序列时.插入排序将会在非常短的时间内完毕数组的排序,为此能够设计一个单调序列h[n],将数组分为多个小的序列 ...

  3. 基于visual Studio2013解决面试题之1404希尔排序

     题目

  4. python实现排序算法 时间复杂度、稳定性分析 冒泡排序、选择排序、插入排序、希尔排序

    说到排序算法,就不得不提时间复杂度和稳定性! 其实一直对稳定性不是很理解,今天研究python实现排序算法的时候突然有了新的体会,一定要记录下来 稳定性: 稳定性指的是 当排序碰到两个相等数的时候,他 ...

  5. python数据结构与算法第十一天【希尔排序】

    1.希尔排序的原理 2.代码实现 def shell_sort(alist): n = len(alist) # 初始步长 gap = n / 2 while gap > 0: # 按步长进行插 ...

  6. Python排序算法——希尔排序(Shell’s Sort)

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10793487.html 一.希尔排序(Shel ...

  7. 希尔排序算法的php实现

    虽然现在各种程序语言都有其各自强大的排序库函数,但是这些底层实现也都是利用这些基础或高级的排序算法. 理解这些复杂的排序算法还是很有意思的,体会这些排序算法的精妙~ 一.希尔排序(shell sort ...

  8. 希尔排序之python

    希尔排序( Shell sort) 插入排序的改进版本,其核心思想是将原数据集合分割成若干个子序列,然后再对子序列分别进行直接插入排序,使子序列基本有序,最后再对全体记录进行一次直接插入排序. 我的面 ...

  9. python算法之希尔排序

    希尔排序 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. 希尔 ...

随机推荐

  1. [转帖]超能课堂(199) 接口渐趋统一,USB4又如何能引领变革?

    https://www.expreview.com/70414.html 接口协议真复杂.. 9月3日,USB IF正式公布了USB4(你没看错,就是USB4,没有空格)的技术规格.USB-IF表示, ...

  2. fiddler手机抓包1

    1.手机抓包配置教程:https://www.jianshu.com/p/724097741bdf 2.

  3. Win10 鼠标右键新建菜单添加自定义文件

    1. 引言 在鼠标右键(右单机)新建菜单中添加自定义文件,例如:写字板,markdown等. 效果图: 2. 操作步骤(以Win10为例) 1. win+R输入regedit进入注册表 2. 这里以添 ...

  4. homestead的创建和使用

    1.下载vistualbox和vagrant并安装 2.安装了git的话就在想设置的目录或者文件夹下用git命令执行vagrant box add laravel/homestead,或者用cmd命令 ...

  5. 值得收藏的Python第三方库

    网络站点爬取 爬取网络站点的库Scrapy – 一个快速高级的屏幕爬取及网页采集框架.cola – 一个分布式爬虫框架.Demiurge – 基于PyQuery 的爬虫微型框架.feedparser ...

  6. 5-6 c语言之【枚举,联合体,递归】

    今天学习了枚举,联合体,递归,重点在于递归,所以从网上找到了一些递归的题目进行练习,毕竟程序员界流传一句话,会用循环的是人,会用递归的是神,哈哈哈 还是按次序进行梳理,第一个枚举,枚举和宏定义很相似, ...

  7. springboot 集成fastDfs

    pom.xml 引入依赖 <dependency> <groupId>com.github.tobato</groupId> <artifactId>f ...

  8. 本地Pycharm将spark程序发送到远端spark集群进行处理

    前言 最近在搞hadoop+spark+python,所以就搭建了一个本地的hadoop环境,基础环境搭建地址hadoop2.7.7 分布式集群安装与配置,spark集群安装并集成到hadoop集群, ...

  9. MarkdownPad2安装与破解-转载

    MarkdownPad安装包下载链接链接:https://pan.baidu.com/s/1o7c4W7C2d8zCPh5z7y4IvQ提取码:e4bf 下载解压之后,找要MarkdownPad2.e ...

  10. SSL Virtual Servers

    SSL Virtual Servers 来源 https://www.carlstalhood.com/ssl-virtual-servers-netscaler-12/ SSL Virtual Se ...