#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]中元素的位置移动的操作附加到原数组上,从而实现排序