# 题目描述
现在有 只水獭站成一排。
水獭们的身高参差不齐,看上去十分混乱。为了让队伍看上去更加整齐,Moca 决定帮助小水獭们按身高从矮到高重新排列。
# 输入格式
第一行一个正整数 ,表示小水獭的个数,保证 。
第二行 个正整数,表示每只小水獭的身高 ,保证 。
# 输出格式
第一行,将水獭们的身高从小到大排序,相邻的两个整数用一个空格隔开。
第二行一个浮点数,表示水獭们身高的中位数,保留到小数点后一位。
# 样例输入
5  | |
7 2 11 10 13  | 
# 样例输出
2 7 10 11 13  | |
10.0  | 
# 题解:快速排序
快排板子题。这里介绍一下  C  语言中的快排模板: void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) (位于  stdlib.h  库中)
第一个参数  void *base :这里传入待排数组序列的首元素指针。
第二个参数  size_t nitems :这里传入待排序元素个数。
第三个参数  size_t size :这里传入每个元素占用空间的大小(通常我们直接写  sizeof(arr[0]) )
第四个参数  int (*compar)(const void*, const void*) :这里传入一个比较函数的指针,即自定义一个比较函数,这个函数接受两个待比较元素的指针,如果第一个参数该排在第二个参数前面,则返回负数;如果第一个参数和第二个参数相等,则返回  0 ;如果第一个参数该排在第二个参数后面,则返回正数。 void*  是任意数据类型的指针变量,在使用时需先强制转化为实际变量类型的指针变量再使用。
以下是参考代码:
#include <stdio.h> | |
#include <stdlib.h> | |
#include <stdbool.h> | |
int n, a[2010];  | |
int cmp(const void *a, const void *b)  | |
{ | |
return *(int*)a > *(int*)b; // 当 a > b 时,应交换两元素。注意将 void* 指针强制转换为 int* 指针,再取出变量的值  | |
} | |
int main()  | |
{ | |
    // freopen("B.in", "r", stdin); | |
    // freopen("B.out", "w", stdout); | |
scanf("%d", &n);  | |
for (int i = 1; i <= n; ++ i)  | |
scanf("%d", &a[i]);  | |
qsort(a + 1, n, sizeof(a[1]), cmp);  | |
for (int i = 1; i <= n; ++ i)  | |
printf("%d ", a[i]);  | |
puts("");  | |
if (n & 1)  | |
printf("%.1lf\n", 1.0 * a[(n + 1) >> 1]);  | |
    else | |
printf("%.1lf\n", (1.0 * a[n >> 1] + a[(n >> 1) + 1]) / 2);  | |
return 0;  | |
} |