绝对值排序

来源:百度知道 编辑:UC知道 时间:2024/06/05 18:01:44
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
输入:
3 3 -4 2
4 0 1 2 -3
0
输出:
-4 3 2
-3 2 1 0
怎么完成不同行的读取...
C的源代码 几组数据要求一起输入(换行的)

giegie1985 的代码没有按照要求使用C语言。以下是测试正确的代码:

#include <stdio.h>
#include <stdlib.h>
int comp(const void*a, const void*b)
{
int ia = *(const int*)a, ib = *(const int *)b;
ia = ia > 0 ? ia : -ia, ib = ib > 0 ? ib : -ib;
return ia < ib;
}
int main()
{
int n, cnt;
while (scanf("%d", &cnt) && cnt){
int i = cnt, *data = (int*)malloc(cnt * sizeof(int));
for (i = 0; i < cnt; i++)scanf("%d", data + i);
qsort(data, cnt, sizeof(int), comp);
for (i = 0; i < cnt; i++)printf("%d ", data[i]);
free(data);
}
return 0;
}

直接读取,不同行也会接着读取。

参考如下:
#include <iostream.h>

void jx_order(int *jx_array,int num)
{
for(int i=0;i<num-1;i++)
{
for(int j=i+1;j<num;j++)
{
if( *(jx_array+i)< *(jx_array+j) )
{
int tmp=*(jx_array+i);
*(jx