Я не смог найти каких-либо простых реализаций для поиска медианы массива. Как это сделать, это bash, не изобретая колесо?Получить медиану несортированного массива в одной строке BASH
Если в настоящее время с помощью этого:
median() {
arr=$1
nel=${#arr[@]}
if (($nel % 2 == 1)); then # Odd number of elements
val="${arr[ $(($nel/2)) ]}"
else # Even number of elements
val="$(((arr[$((nel/2))] + arr[$((nel/2-1))])/2))"
fi
printf "%d\n" "$val"
}
почему я до сих пор не могу понять, что возвращается неправильные значения, и это кажется слишком сложным для чего-то так просто. Я чувствую, что должен быть способ сделать это в одной строке.
Честно говоря, я не вижу ничего сложного в этом коде ...... Вам нужно однострочное решение, используя чистые 'bash'? –
Медиана сортированного массива находится посередине или рядом с ней; медиана несортированного массива может иметь место * где угодно * в массиве. – chepner
Вставьте вторую строку этого ответа в верхней части вашей функции ... http://stackoverflow.com/a/7442658/2836621 –