输入n(n<=100)个整数,依照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等

输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等
#include <stdio.h>
int main()
{ int a[100],b,c,n,k,i,t;
  while(scanf("%d",&n)!=EOF)
  {
    for(b=0;b<n;b++)
    {
      scanf("%d",&a[b]);
    }
 for(c=0;c<n-1;c++)
    {
       k=c;
       for(i=c+1;i<n;i++)
       {
           if(a[k]*a[k]>a[i]*a[i])
            k=i;
           if(k!=c)
           {
               t=a[c];
               a[c]=a[k];
               a[k]=t;
           }
       }

    }
    for(c=n-1;c>=0;c--)
    {
    printf("%d ",a[c]);
    }
    printf("\n");
  }
  return 0;
}
运用选择排序,不知道为什么,输入3 1 0 -1时,排不成1 -1 0这种样子。求高手指点
------解决方案--------------------

#include <stdio.h>
int main()
{
int a[100],b,c,n,k,i,t;
while(scanf("%d",&n) != EOF)
{
for(b = 0; b < n; b++)
{
scanf("%d", &a[b]);
}

for(c = 0; c < n-1; c++)
{
k = c;
for(i = c + 1; i < n; i++)
{
if(a[k] > a[i])
{
k = i;
}
if(k != c)
{
t = a[c];
a[c] = a[k];
a[k] = t;
k = c;
}
}

}
for(c = n-1; c >= 0; c--)
{
printf("%d ",a[c]);
}
printf("\n");
}
return 0;
}

------解决方案--------------------
选择排序,值交换应该发生在全部数据比较完成一次以后。也即你的代码 
          if(k!=c) {
                t=a[c];
                a[c]=a[k];
                a[k]=t;
            }
要放到 for(i=c+1;i<n;i++) {} 外边来,而不是内部
------解决方案--------------------
#include <stdio.h>
int main()
{ int a[100],b,c,n,k,i,t,t1,t2; //------------------------------------
  while(scanf("%d",&n)!=EOF)
  {
    for(b=0;b<n;b++)
    {
      scanf("%d",&a[b]);
    }
 for(c=0;c<n-1;c++)
    {
       k=c;
       for(i=c+1;i<n;i++)
      // {                                        //-------------------------------
           if((t1=a[k]*a[k])>(t2=a[i]*a[i])
------解决方案--------------------
t1==t2&&a[k]>a[i])  //-----------------------
            k=i;
           if(k!=c)
           {
               t=a[c];
               a[c]=a[k];
               a[k]=t;
           }
      // }  //----------------------------------
    }
    for(c=n-1;c>=0;c--)
    {
    printf("%d ",a[c]);
    }
    printf("\n");
  }
  return 0;
}