所以这个学期我必须处理数据结构中的这个项目,它要求我必须用 C 编写代码。问题是我对 C 有点生疏,我正在处理基本问题。其中一个问题是我必须用 C 语言编写一个简单的程序来实现 BubbleSort。 BubbleSort 算法必须是一个单独的函数并在主程序中调用它。这是我的努力。问题是它不键入排序数组。我希望你可以帮助我 。
代码:
int calculateRand()
{
int num;
num = (rand())%(UPPER-LOWER+1)+LOWER;
return num;
}
void swap(int *xp, int *yp)
{
int temp=*xp;
*xp=*yp;
*yp=temp;
}
void BubbleSort(int S[], int n)
{
int up=n;
int i,j;
while(up>1)
{
j=0;
for(i=1; i<up-1; i++)
{
if(S[i]>S[i+1])
{
swap(&S[i], &S[i+1]);
j++;
}
}
}
for(i=0; i<n; i++)
{
printf("%d\n", S[i]);
}
}
int main()
{
int n,i;
printf("Parakalw dwste mia timh sto n: \n");
scanf("%d", &n);
int S[sizeof(n)];
printf("O mi taxinomimenos pinakas einai o exis \n");
for(i=0; i<n-1; i++)
{
S[i]=calculateRand();
printf("%d\n", S[i]);
}
printf("O pinakas meta thn taxinomisi einai \n");
BubbleSort(S[sizeof(n)], n);
return 0;
}
最佳答案
因此,如果我们从顶部开始,calculateRand()
中就会出现问题功能,因为你没有声明 UPPER
和 LOWER
变量或将它们作为参数传递给函数。
交换功能没问题。
在BubbleSort()
您需要减少 up
的功能for 循环后的变量值。
while(up>1)
{
for(i=1; i<up-1; i++)
{
if(S[i]>S[i+1])
{
swap(&S[i], &S[i+1]);
j++;
}
}
up--;
}
此外,此时您应该从 0 而不是 1 开始迭代,因为数组从索引 0 开始。所以 for(i=0; i<up-1; i++)
才是正确的做法。
最后在 main()
声明数组变量时的函数 S
你不应该通过 sizeof(n)
自 n
是一个整数,整数的大小是 4。相反,您想使用 n
因为它是int S[n];
填充数组的 For 循环应该达到 n
不是n-1
如果你想填充数组的所有元素。但是,如果您更改此设置,则需要在 BubbleSort()
中进行类似的更改。功能。
最后在 BubbleSort()
中函数调用你传递的是数组的最后一个元素,它是一个整数,而函数期望你传递一个数组。它应该看起来像这样 BubbleSort(S, n);
相反。
关于c - C : How to properly call function inside main 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55283536/