#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;
}
你想输入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;
}
printf("请输入6个数\n");
for(i=0;i<=6;i++)
scanf("%d",&R[i].key);
====你这是输入7个啦!数组越界
打印也一样,越界啦
另外printf("%d",改为 printf("%d ",加个空格,不然数字连在一起看不清。
测试通过
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632