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,

GCC 出力:

1, 2, 3, 5, 4,

なぜ、どのようにこれが起こっているのですか?

4

1 に答える 1

4

これがまったく機能するという事実は疑わしいです。この行で元の配列を超えています:

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--)
于 2011-09-18T16:47:59.900 に答える