HDU 2020 - 绝对值排序(排序)
2013-11-26 20:04
253 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2020
这题的考点就是排序。
对初学者来说,比较熟悉的排序是“冒泡排序”和“选择排序”。
在排升序的时候,元素比较用'<',降序用'>'。
对于整数等基本数据类型,这样的比较符号很容易理解。但换了其他比较规则,你是不是还能很好地理解呢?呵呵。
就像本题的规则:比较数的绝对值的大小,在这里-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);
这题的考点就是排序。
对初学者来说,比较熟悉的排序是“冒泡排序”和“选择排序”。
在排升序的时候,元素比较用'<',降序用'>'。
对于整数等基本数据类型,这样的比较符号很容易理解。但换了其他比较规则,你是不是还能很好地理解呢?呵呵。
就像本题的规则:比较数的绝对值的大小,在这里-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);
#include <math.h> #include <stdio.h> #include <stdlib.h> int cmp(const int *a, const int *b) { return abs(*b) - abs(*a); } int main(void) { int n, i, x[101]; while (scanf("%d", &n), n) { for (i = 0 ; i < n ; i++) scanf("%d", x + i); qsort(x, n, sizeof(int), cmp); for (i = 0 ; i < n ; i++) printf("%d%c", x[i], (i != n - 1 ? ' ' : '\n')); } return 0; }
相关文章推荐
- HDU 2020 绝对值排序
- HDU 2020 绝对值排序(water)
- HDU 2020 绝对值排序
- Hdu:2020 绝对值排序
- HDU:2020 绝对值排序
- hdu 2020 绝对值排序
- hdu_2020_绝对值排序
- HDU_2020 绝对值排序
- HDU 2020 绝对值排序
- HDU 2020 绝对值排序
- 绝对值排序 HDU 2020
- HDU 2020 绝对值排序
- hdu 2020 绝对值排序
- HDU-2020(绝对值排序)(abs函数)
- HDU_ACM-2020 绝对值排序
- [置顶]绝对值排序-hdu-2020
- hdu 2020 绝对值排序
- HDU 2020 绝对值排序
- HDU 2020 绝对值排序
- hdu 2020 绝对值排序