希尔排序算法(C语言实现)

希尔排序算法(C语言实现)希尔排序算法 demo

一、希尔排序

由希尔在1959年提出,设定一个元素间隔增量gap,将参加排序的序列按这个间隔分成若干个子序列,对子序列用一般排序法排序与冒泡排序的思想相似,即将两数比较交换;冒泡法是相邻两数比较交换,而希尔排序只有当希尔间隔值为1时才与冒泡法完全一样,所以可以跟据希尔间隔值的不同进行分组排序最优间隔值是至今未解决的数据难题,一般用折半间隔,直到间隔为1;如果直接将希尔间隔设为1效率则是最低的,需要多次遍历。

二、希尔排序处理过程

将固定间隔值两两比较交换,若干次后,这个序列将成为一个有序序列对分好组的子序列采用两两比较交换,循环比较一遍之后序列不一定有序,所以对于子序列可能会进行多次循环比较,直到排好序。

三、图解

希尔排序算法(C语言实现)

四、demo

void shellsort(int *k,int n) { int i, j, temp, gap = n; while(gap > 1) { gap = gap/2; /*增量缩小,每次减半*/ for(i=0;i<n-gap;i++) //n-gap 是控制上限不让越界 { j = i + gap; //相邻间隔的前后值进行比较 if(k[i]>k[j]) { temp = k[i]; k[i] = k[j]; k[j] = temp; } } } }




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233944.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《JavaScript 模式》读书笔记(6)— 代码复用模式1

    我们有开始进入新篇章了。这篇内容主要讲代码复用模式,实际上代码复用,就是继承啊,原型啊,构造函数啊等等这一类的内容。对于前端进阶来说,是很重要的基础知识。这一篇内容会对原型、继承有很深入的讲解。我也

    2022年3月25日
    38
  • XmlDocument使用

    XmlDocument使用 privateXmlDocumentxmlDoc;       //loadxmlfile       privatevoidLoadXml()       {           xmlDoc=newXmlDocument();           xmlDoc.Load(Server.MapPath(“User.xml”));       }       

    2022年6月22日
    33
  • Apache OFbiz entity engine源代码解读

    Apache OFbiz entity engine源代码解读

    2021年12月5日
    85
  • 实例讨论数据可视化的配色思路怎么写_配色分析案例

    实例讨论数据可视化的配色思路怎么写_配色分析案例引子有一数据集如下:数据解读:研究对象的目标层A分为B1,B2,B3三个准则层;B1层下有C1,C2,C3,C44个指标;B2层下只有C5一个指标;B3层有C6,C7,C83个指标。指标权重是该指标在所属准则层的权重;组合权重是该指标在目标层的权重。现在,要绘制上述数据的“组合权重”的饼图。如何给这个饼图配色呢?数据可视化配色的误区下图是群友绘制的图:他自己对结果不满意,他认为是颜色搭配太丑。我们来看看,他的配色问题出在哪:颜色太

    2022年10月2日
    0
  • navicat oracle存储过程,Navicat 运行 Oracle 存储过程示例

    navicat oracle存储过程,Navicat 运行 Oracle 存储过程示例navicat存储过程界面功能点击运行时,会弹出窗口填入输入参数。使用Navicat创建存储过程在函数位置,右键新建函数,OUT参数没有默认值,写了也没用。软件自动生成存储过程框架,然后人去补充“声明变量”和“主体”部分,注意存储过程名称可以用引号,也可以不用引号。Navicat运行存储过程方法一:使用Navicat软件界面功能方法二:在查询界面创建变量并调用存储过程Orac…

    2022年7月17日
    79
  • 异步处理FutureTask实例「建议收藏」

    异步处理FutureTask实例「建议收藏」   在Web应用前端,AJAX有同步和异步处理,异步可以避免阻塞。在WEB后端一般业务应用大多为同步处理,但也有一些需要异步处理的场合,比如A系统调B系统接口I,但B系统处理时间很长,这时,A系统主线程不能一直阻塞等待,可以使用异步处理。即先调用接口I,随即做后面的处理,等B系统返回值时再进行返回后处理。时序为:A:invokeIA:dootherthingB:处理完成,…

    2022年6月17日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号