C에서이 버블 정렬 알고리즘을 만들었습니다. DM에서 잘 작동하지만 gcc에서 실행될 때 잘못된 결과가 나옵니다.버블 정렬 프로그램, DM 컴파일러 (Windows) 및 GCC (Ubuntu)에서 작동하지 않음
#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,
얼마나?
는 디버거에서 단계별로 시도? 또는 변수의 중간 값 인쇄? –
루프에서 배열의'(n + 1) 번째 요소에 접근하고 있습니다 : 'j'가 5에서'i '로 바뀌면'a [j]'는'a [5]'입니다. 그러나 5 개의 요소가있는 배열은 '5'의 인덱스를 갖지 않습니다. – pmg
어떤 상황에서도 전역 변수'i'와'j'를 사용하는 것은 소름이 듭니다. (단일 문자 전역 변수를 사용할 이유가 거의 없습니다.) 루프 변수 선언을 피하는 방편 일 때 두 배입니다. C99에서는'for (int i = 0; ...)'등을 쓸 수 있습니다. –