2020 绝对值排序

关键字: 代码分享 杭电100题

问题描述

Problem Description

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

Input

输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。

Output

对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。

Sample Input

3 3 -4 2
4 0 1 2 -3
0

Sample Output

-4 3 2
-3 2 1 0

问题分析

Problem Analyse

本题是为C语言初学者提供的。

Algorithm Analyse

这题的考点就是排序。对初学者来说,比较熟悉的排序是“冒泡排序”和“选择排序”。

在排升序的时候,元素比较用'<',降序用'>'。对于整数等基本数据类型,这样的比较符号很容易理解。但换了其他比较规则,你是不是还能很好地理解呢?呵呵。

就像本题的规则:比较数的绝对值的大小,在这里-3 > 1,所以就不能直接用'>',而是要自己制定一套大小规则。刚开始可能不习惯看到 -3 > 1这样的规则,熟悉后就好了。

算法实现

你可以自己写一个判断大小的函数int cmp(a, b)

如果a > b返回大于0的值,a = b 返回0,a < b 返回小于0的值

ANSI C里的qsort()就是这样做的。用一个比较函数来提高排序函数的通用性。

这里的比较规则就是return abs(b) - abs(a);

参考源码

redraiment使用Emacs Lisp批量迁移《HDU 2020-2029》