绝对值从大到小排序
冒泡排序
#include <stdio.h> #include <math.h> int main() { int n; while (scanf_s("%d", &n) && n) { int i, j, t, s[101] = { 0 }; for (i = 0; i < n; i++) scanf_s("%d", &s[i]); for (i = 0; i < n; i++) { //冒泡排序 for (j = 0; j < n - 1 - i; j++) { if (abs(s[j]) < abs(s[j + 1])) t = s[j + 1]; s[j + 1] = s[j]; s[j] = t; } } for (i = 0; i < n; i++) printf("%d%c",s[i],(i < n -1 ? ‘ ‘:‘\n‘)); } return 0; }
参考答案
#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; }
原文:http://www.cnblogs.com/ailx10/p/5336949.html