• 数据结构-插入排序之希尔排序


    希尔排序是一种分组插入排序,基本思想如下:

    先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量 =1(< …<d2<d1),即所有记录放在同一组中进行直接插入排序为止。

    算法

    //文件名:exp10-2.cpp
    #include <stdio.h>
    #define MAXE 20            //线性表中最多元素个数
    typedef int KeyType;
    typedef char InfoType[10];
    typedef struct           //记录类型
    {
        KeyType key;        //关键字项
        InfoType data;        //其他数据项,类型为InfoType
    } RecType;
    void ShellSort(RecType R[],int n)    //希尔排序算法
    {
        int i,j,d,k;
        RecType temp;
        d=n/2;                    //d取初值n/2
        while (d>0) 
        {    
            for (i=d;i<n;i++)    //将R[d..n-1]分别插入各组当前有序区中
            {    
                j=i-d;
                while (j>=0 && R[j].key>R[j+d].key)        
                {    
                    temp=R[j];      //R[j]与R[j+d]交换
                    R[j]=R[j+d];
                    R[j+d]=temp;
                    j=j-d;
                }
            }
            printf("d=%d: ",d);    //输出每一趟的排序结果
            for (k=0;k<n;k++)
                printf("%3d",R[k].key);
            printf("
    ");
            d=d/2;               //递减增量d
        }
    }
    void main()
    {
        int i,k,n=10;
        KeyType a[]={9,8,7,6,5,4,3,2,1,0};
        RecType R[MAXE];
        for (i=0;i<n;i++)
            R[i].key=a[i];
        printf("初始关键字: ");            //输出初始关键字序列
        for (k=0;k<n;k++)
            printf("%3d",R[k].key);
        printf("
    ");
        ShellSort(R,n);
        printf("最后结果: ");            //输出初始关键字序列
        for (k=0;k<n;k++)
            printf("%3d",R[k].key);
        printf("
    
    ");
    }
    作者:leemoaly
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    SQL Server复制情况下的高可用方案(一)镜像+复制
    sqlserver数据库镜像运行模式
    普通PC机支持内存128G,单条32G内存
    ICSharpCode.SharpZipLib 压缩、解压文件 附源码
    利用SharpZipLib进行字符串的压缩和解压缩
    SQL Server常见数据类型介绍
    .net中压缩和解压缩的处理
    solr字段压缩属性compressed新版本已经移除
    solr schema.xml Field属性详解
    Altmetric
  • 原文地址:https://www.cnblogs.com/kavs/p/4974900.html
Copyright © 2020-2023  润新知