一颗,一朵 2021-06-01 16:39 采纳率: 100%
浏览 28
已采纳

问一下我这个希尔排序的代码为什么不能运行

#include <stdio.h>
typedef int KeyType;
typedef struct
{KeyType key;
}RecType;
 

void ShellSort(RecType R[], int n)
{
    int i, j, d;
    RecType tmp;
    d = n / 2;                
    while (d > 0)                    
    {
        for (i = d;i < n;i++)
        {
            j = i - d;
            tmp = R[i];
            while (j >= 0 && R[j].key > tmp.key)
            {
                R[j + d] = R[j];
                j = j - d;
            }
            R[j + d] = tmp;
        }
        d = d / 2;                    
    }
}
int main()
{RecType R[6];
int i;
printf("请输入6个数\n");
for(i=0;i<=6;i++)
scanf("%d",&R[i].key);
ShellSort(R,6);
 for(i=0;i<=6;i++)
printf("%d",R[i].key);
return 0;
}

  • 写回答

3条回答 默认 最新

  • 关注

    你想输入6个数,但是i=0;i<=6会输入7个,输出时也是注意区间

    #include <stdio.h>
    typedef int KeyType;
    typedef struct
    {KeyType key;
    }RecType;
     
    
    void ShellSort(RecType R[], int n)
    {
        int i, j, d;
        RecType tmp;
        d = n / 2;                
        while (d > 0)                    
        {
            for (i = d;i < n;i++)
            {
                j = i - d;
                tmp = R[i];
                while (j >= 0 && R[j].key > tmp.key)
                {
                    R[j + d] = R[j];
                    j = j - d;
                }
                R[j + d] = tmp;
            }
            d = d / 2;                    
        }
    }
    int main()
    {RecType R[6];
    int i;
    printf("请输入6个数\n");
    for(i=0;i<6;i++)
    scanf("%d",&R[i].key);
    ShellSort(R,6);
     for(i=0;i<6;i++)
    printf("%d",R[i].key);
    return 0;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?