1

我在 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,

海合会输出:

1, 2, 3, 5, 4,

这是如何以及为什么会发生的?

4

1 回答 1

4

这完全有效的事实是值得怀疑的。您超出了这一行的原始数组:

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

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

这一行:

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

应该:

for(j=n-1; j>i;j--)
于 2011-09-18T16:47:59.900 回答