Программа Bubble Sorting, работает в компиляторе 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,

Как и почему это происходит?

1 ответ

Решение

Факт, что это работает вообще, является подозрительным. Вы пересекаете исходный массив в этой строке:

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--)
Другие вопросы по тегам