Программа 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--)