题目如图

我的代码如下
#define N 29
int main()
{
long long int a[N];
void input(long long int b[], int n);
void output(long long int c[], int n);
void sort(long long int d[], int n);
input(a, N);
sort(a, N);
output(a, N);
return 0;
}
void input(long long int b[], int n)
{
int i = 0;
for (i = 0; i < N; i++)
{
scanf("%lld", &b[i]);
}
}
void output(long long int c[], int n)
{
int i = 0;
for (i = 0; i < N; i++)
{
printf("%20lld", c[i]);
}
}
void sort(long long int d[], int n)
{
int i = 0;
int j = 0;
for(j=0;j<N;j++)
{
for (i = 0; i < N - i; i++)
{
if (d[i] > d[i + 1])
{
d[i] ^= d[i + 1];
d[i + 1] ^= d[i];
d[i] ^= d[i + 1];
}
}
}
}
求解答,这个程序有时候运行的结果是对的有时候又是错的,不明白错在哪个位置了