绝对值排序问题,额一五啊

问题遇到的现象和发生背景

while那里这样写有问题吗,我的输出结果不对

用代码块功能插入代码,请勿粘贴截图
我想要达到的结果

img


```c++
#include
#include
int main()
{ int n,t,i;
  scanf("%d",&n);
  int a[n];
  while(scanf("%d",&a[n])!=0)
  { for(i=0;ifabs(a[i]);
     if(a[i]>a[i+1])
      { t=a[i];a[i]=a[i+1];a[i+1]=t;
      }
    }
    for(i=0;iprintf("%d ",a[i]);
    }
  }
    return 0;
}

```


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<assert.h>
int main()
{
    int n, t, i;
    scanf("%d", &n);
    //动态申请n个空间大小的内存
    int* a = (int*)malloc(sizeof(int) * n);
    assert(a != nullptr);
    int pos = 0;
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[pos++]);//保存n个数字
    }

    //对这些数字进行绝对值排序
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
            if (abs(a[i]) > abs(a[j])) {
                int tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }

    //打印排序后的数组
    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }

    free(a);
    return 0;
}