冒泡排序程序,可在 DM 编译器(Windows 上)和不在 GCC(Ubuntu) 上
我用 C 语言编写了这个冒泡排序算法。它在 DM 中运行良好,但在 gcc 中执行时,给出了错误的输出。
#include <stdio.h>
int i,j;
void BubbleSort(int*a, int n) //to sort the numbers
{
int temp;
for(i=0; i<n;i++)
for(j=n; j>i;j--)
if (a[j]<a[j-1])
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
void Display(int * a, int n) //to display
{
printf("\nThe sorted numbers are:\n");
for(i=0;i<n;i++)
{
printf("%d, ",a[i]);
}
}
int main()
{
int a[50],n,choice;
printf("\nEnter no. of elements to sort: (max. 50) ");
scanf("%d",&n);
printf("\nEnter the numbers : ");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
BubbleSort(a,n);
Display(a,n);
return 0;
} //End of main
输入:
5
2 1 5 3 4
DM 输出:
1, 2, 3, 4, 5,
GCC 输出:
1, 2, 3, 5, 4,
这是如何以及为何发生的?
I made this bubble sort algorithm in C. Its working well in DM, but when executed in gcc, gives me incorrect output.
#include <stdio.h>
int i,j;
void BubbleSort(int*a, int n) //to sort the numbers
{
int temp;
for(i=0; i<n;i++)
for(j=n; j>i;j--)
if (a[j]<a[j-1])
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
void Display(int * a, int n) //to display
{
printf("\nThe sorted numbers are:\n");
for(i=0;i<n;i++)
{
printf("%d, ",a[i]);
}
}
int main()
{
int a[50],n,choice;
printf("\nEnter no. of elements to sort: (max. 50) ");
scanf("%d",&n);
printf("\nEnter the numbers : ");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
BubbleSort(a,n);
Display(a,n);
return 0;
} //End of main
Input:
5
2 1 5 3 4
DM Output:
1, 2, 3, 4, 5,
GCC Output:
1, 2, 3, 5, 4,
How and why is this happening?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是否有效这一事实值得怀疑。您在这一行超越了原始数组:
您正在比较一个尚未初始化的值,因此
a[n]
处的值是初始化时的值。这一行:
应该是:
The fact that this works at all is suspect. You're overstepping the original array on this line:
You're comparing a value that you haven't initialized so the value at
a[n]
is whatever is there upon initialization.This line:
should be: