如何编写awk函数实现未排序数组的中位数计算功能
AWK 未排序数组中位数计算函数
实现逻辑
- 首先对输入的任意未排序数组执行升序排序
- 读取排序后数组的长度,根据奇偶性计算结果:
- 长度为奇数时,直接取中间位置的元素作为中位数
- 长度为偶数时,取中间两个元素的算术平均值作为中位数
函数实现
# 入参说明:arr为待计算的未排序数组,len为数组长度 function calc_median(arr, len, sorted_arr, mid, median) { # 调用awk内置asort函数对数组排序,排序结果存入sorted_arr asort(arr, sorted_arr) mid = (len + 1) / 2 if (len % 2 == 1) { median = sorted_arr[int(mid)] } else { median = (sorted_arr[mid - 0.5] + sorted_arr[mid + 0.5]) / 2 } return median }
注:如果使用的awk版本不支持
asort内置函数,可以自行替换为冒泡/快速排序等自定义排序逻辑完成数组排序。
使用示例
比如我们要计算未排序数组[9, 2, 5, 7, 1, 3, 8]的中位数,调用方式如下:
BEGIN { # 构造测试数组 test_arr[1] = 9 test_arr[2] = 2 test_arr[3] = 5 test_arr[4] = 7 test_arr[5] = 1 test_arr[6] = 3 test_arr[7] = 8 arr_len = 7 # 调用函数计算 res = calc_median(test_arr, arr_len) print "中位数为:" res }
运行上述代码输出结果为5,符合预期。
内容的提问来源于stack exchange,提问作者user1424739
相关产品推荐
相关产品推荐

