希尔排序

#include <stdio.h>
#define MaxSize 100

typedef int KeyType;        /*关键字类型*/

typedef char ElemType[10];    /*其他数据项类型*/

typedef struct 
{    
    KeyType key;               /*关键字域*/
    ElemType data;             /*其他数据域*/
} LineList;                    /*线性表元素类型*/

void ShellSort(LineList R[],int n)
{
    int i,j,gap;
    LineList tmp;
    gap=n/2;                    /*增量置初值*/
    while (gap>0)
    {    
        for (i=gap;i<n;i++)      /*对所有相隔gap位置的所有元素组进行排序*/
        {
            tmp=R[i];
            j=i-gap;
            while (j>=0 && tmp.key<R[j].key)/*对相隔gap位置的元素组进行排序*/
            {
                R[j+gap]=R[j];
                j=j-gap;                    /*移到本组中的前一个元素*/
            }
            R[j+gap]=tmp;
            j=j-gap;
        }
        gap=gap/2;    /*减小增量*/
    }
}

void main()
{
    LineList R[MaxSize];
    KeyType a[]={75,87,68,92,88,61,77,96,80,72};
    int n=10,i;
    for (i=0;i<n;i++)
        R[i].key=a[i];
    printf("排序前:");
    for (i=0;i<n;i++)
        printf("%3d",R[i].key);
    printf("\n");
    ShellSort(R,n);
    printf("排序后:");
    for (i=0;i<n;i++)
        printf("%3d",R[i].key);
    printf("\n");
}
Copyright © www.huweihuang.com 2017-2019 all right reserved,powered by GitbookUpdated at 2019-03-24 15:01:44

results matching ""

    No results matching ""