算法冒泡排序出现了错误

代码:

#include<stdio.h>
#define DataType int
#define N 8
    void BubbleSort(DataType a[], int n)
    {
        int flag = 1;
        int i, j;
        DataType temp;
        for (j = 1;j < n && flag == 1; i++)
        {
            flag = 0;
            for (i = 1;i <= n - j; i++)
            {
            
                if (  a[i] > a[i + 1])
                {
                    flag = 1;
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }
        }
    }
    int main()
    {
        DataType a[N] = { 4,9,1,8,21,13,42,27 };
        int i = 0;
        BubbleSort(a, 8);
        for (i = 0;i < 8;i++)
        {
            printf("%d", a[N]);
        }
        return 0;
    }


```已经没有语序的错误了,但是最后说是a的栈堆被破坏,
问题显示:Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.
我不知道怎么改了。

修改后如下:
算法本身有一点问题,下面输出的时候循环内应为printf("%d ", a[i]);而不是printf("%d ", a[N]);,后者会直接造成数组越界并输出乱码
有帮助望采纳~

#include <stdio.h>
#define DataType int
#define N 8
void BubbleSort(DataType a[], int n)
{
    int flag = 1;
    int i, j;
    DataType temp;
    for (j = 0; j < n && flag == 1; j++)
    {
        flag = 0;
        for (i = 0; i < n - j - 1; i++)
        {
            if (a[i] > a[i + 1])
            {
                flag = 1;
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
    }
}
int main()
{
    DataType a[N] = {4, 9, 1, 8, 21, 13, 42, 27};
    int i = 0;
    BubbleSort(a, 8);
    for (i = 0; i < 8; i++)
    {
        printf("%d ", a[i]);
    }
    return 0;
}

第9行最后是j++,不是i++,写错了