冒泡排序程序,可在 DM 编译器(Windows 上)和不在 GCC(Ubuntu) 上

发布于 2024-12-04 23:24:01 字数 1050 浏览 3 评论 0原文

我用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

携余温的黄昏 2024-12-11 23:24:01

这是否有效这一事实值得怀疑。您在这一行超越了原始数组:

if (a[j]<a[j-1])  // sketchy when j==n

您正在比较一个尚未初始化的值,因此 a[n] 处的值是初始化时的值。

这一行:

for(j=n; j>i;j--)

应该是:

for(j=n-1; j>i;j--)

The fact that this works at all is suspect. You're overstepping the original array on this line:

if (a[j]<a[j-1])  // sketchy when j==n

You're comparing a value that you haven't initialized so the value at a[n] is whatever is there upon initialization.

This line:

for(j=n; j>i;j--)

should be:

for(j=n-1; j>i;j--)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文