【第十五周项目1】验证算法——希尔排序

来源:互联网 发布:美国大学生朝鲜 知乎 编辑:程序博客网 时间:2024/05/18 03:12
/*   * Copyright (c)2017,烟台大学计算机与控制工程学院   * All rights reserved.   * 文件名称:项目1-2.cbp   * 作    者:swz   * 完成日期:2017年12月14日       * 问题描述: 验证希尔排序     * 输入描述:无   * 程序输出:测试数据   */     #include <stdio.h>    #define MaxSize 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,gap;        RecType 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;  //减小增量        }    }        int main()    {        int i,n=11;        RecType R[MaxSize];        KeyType a[]= {16,25,12,30,47,11,23,36,9,18,31};        for (i=0; i<n; i++)            R[i].key=a[i];        printf("排序前:");        for (i=0; i<n; i++)            printf("%d ",R[i].key);        printf("\n");        ShellSort(R,n);        printf("排序后:");        for (i=0; i<n; i++)            printf("%d ",R[i].key);        printf("\n");        return 0;    }




阅读全文
0 0
原创粉丝点击