原题链接:
思路分析:
第一步:建立两个数组,一个用于存放原数据,一个用于存放绝对值。
第二步:写一个数字交换的函数,因为不仅要排序原数据,也要排序绝对值数据,所以封装成函数比较方便。循环遍历,进行排序。
第三步:循环输出原数据即可。
代码实现:
#include<stdio.h>
#include<math.h>
void Swap(int* a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
if (n == 0)
break;
int a[101] = { 0 }, b[101] = { 0 }, i = 0, j = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
b[i] = abs(a[i]);//用数学函数时要记得包含 #include<math.h> 头文件
}
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if (b[i] < b[j])
{
Swap(&b[i], &b[j]);//只有传址调用才可以改变值
Swap(&a[i], &a[j]);
}
}
}
for (i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}