因此本学期我必须处理数据结构中的这个项目,并且它要求我必须使用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;
}
答案 0 :(得分:2)
因此,如果我们从头开始,则calculateRand()
函数中会有问题,因为您没有声明UPPER
和LOWER
变量,也没有将它们作为参数传递给函数。
交换功能还可以。
在BubbleSort()
函数中,您需要在for循环后减小up
变量值。
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
的{{1}}
用于填充数组的For循环应该上升到int S[n];
而不是n
。但是,如果您更改此设置,则需要在n-1
函数中进行类似的更改。
最后,在BubbleSort()
函数调用中,您要传递数组的最后一个元素,该元素是整数,而函数希望您传递一个数组。它应该看起来像这样BubbleSort()
。
答案 1 :(得分:1)
C的现代变体允许使用可变大小的数组
let summaryFuture = client.post(summaryURL) { post in
post.http.headers.add(name: "authtoken", value: token)
}.flatMap(to: SummaryModel.self) { (response) in
return try response.content.decode(SummaryModel.self)
}
let sponsorEnrollerFuture = client.post(sponsporEnroller) { post in
post.http.headers.add(name: "authtoken", value: token)
}.flatMap(to: SponsorEnrollerModel.self) { (response) in
return try response.content.decode(SponsorEnrollerModel.self)
}
本来是合法的。否则
int S[n];
会有所帮助。