前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >对希尔排序的一点理解

对希尔排序的一点理解

作者头像
戈贝尔光和热
发布2018-12-27 15:06:41
3800
发布2018-12-27 15:06:41
举报
文章被收录于专栏:HUBU生信HUBU生信

希尔排序实际上是一种特殊的插入排序,它是通过对直接插入排序的一些特点的利用,从而达到化简得效果。 具体内容为:

1.一方面,小段的直接插入排序,效率很高; 2.另一方面,当待排数据基本上是有序的时候,直接插入排序的效率也会很高; 利用这两个特点, 即可构成希尔排序。

注释在代码中

代码语言:javascript
复制
void  Shell_Sort_Unit(Sqlit  &L,int  d)//d为比较增量
{
    int  j,k;
    for(j=d+1;j<=L.length;j++)//length不包括哨兵
    {
         L.R[0]=L.R[j];
         for(k=j-d;k>0&&L.R[0].key<L.R[k].key;k=k-d)
         {
             L.R[k+d]=L.R[k];
         }
         L.R[k+d]=L.R[0];
    }

}


完整代码:

#include "stdafx.h"
#include "malloc.h"
#include  "stdlib.h"

#define  OK  1
#define  ERROR  -1
#define  OVERFLOW  -2
#define  MAX_SIZE   100
#define  TRUE  1
#define  FLASE  0
typedef   int   KeyType;

typedef  struct  RecType
{
    KeyType  key;/*关键字*/
}RecType;
typedef  struct  Sqlist
{
    RecType R[MAX_SIZE];
    int  length;
}Sqlist;

void  Create(Sqlist  &L)
{
    int  d = 0;
    L.length = 10;
    L.R[0].key= 0;
    for (int i = 1; i <= 10; i++)
    {
        printf("请输入第%d个数据", i);
        scanf_s("%d", &d);
        L.R[i].key = d;
    }
}

void  Travel(Sqlist  L)
{
    for (int i = 1; i <= L.length; i++)
    {
        printf("节点%d的主键:%d\r\n", i, L.R[i].key);

    }
}


/*希尔排序*/
void Shell_Sort_Unit(Sqlist  &L, int  d)
{
    int c, j;
    for (j = d + 1; j < L.length; j++)
    {
        L.R[0] = L.R[j];
        for (c = j - d; c>0 && L.R[c].key > L.R[0].key; c = c - d)
        {
            L.R[c + d] = L.R[c];
        }
        L.R[c + d] = L.R[0];
    }
}

void  Shell_Sort(Sqlist  &L, int  dk[], int t)
{
    for (int i = 0; i < t; i++)
    {
        Shell_Sort_Unit(L, dk[i]);
    }
}


int  main()
{
    Sqlist  L;
    Create(L);
    Travel(L);
    int dk[3];
    dk[0] = 5;
    dk[1] = 3;
    dk[2] = 1;
    Shell_Sort(L, dk, 3);
    Travel(L);
}

运行示意图:

全文结束,欢迎在评论区讨论~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档