一道关于C++ 绝对值排序的问题,我的代码的运行结果满足绝大多数情况的输出,对一些特殊情况出错,但并未查明其原因,请高手指点

图片说明

#include<stdio.h>
using namespace std;
int main(){
    int n,line[100],line_0[100],temp;
    while(scanf("%d",&n)){
        if(n==0){
            return 0;
        }
        for(int i=0;i<n;i++){
            scanf("%d",&line[i]);
        }
        for(int i=0;i<n;i++){
            line_0[i]=line[i];
        }
        for(int i=0;i<n;i++){
            if(line_0[i]<0) line_0[i]=-line_0[i];
        }
        for(int i=1;i<n;i++){
            for(int j=0;j<i;j++){
                if(line_0[j]<line_0[j+1]){
                    temp=line[j];
                    line[j]=line[j+1];
                    line[j+1]=temp;
                    temp=line_0[j];
                    line_0[j]=line_0[j+1];
                    line_0[j+1]=temp;
                }
            }
        }
        for(int i=0;i<n-1;i++){
            printf("%d ",line[i]);
        }
        printf("%d\n",line[n-1]);
    }
    return 0;
}

不知道这段代码哪里有问题,无法对4 0 1 2 -3正确操作进行排序,请高手指点
补充:我的思路是创建两个一样的数组line[100]与line_0[100],操作line_0[100],使其中所有的负数变成正数,然后对line_0[100]进行冒泡排序,同时将line_0[100]中元素的位置移动的操作附加到原数组上,从而实现排序