Ich konnte keine einfachen Implementierungen finden, um den Median eines Arrays zu finden. Wie kann dies Bash sein, ohne das Rad neu zu erfinden?Erhalten Median der unsortierten Array in einer Zeile von BASH
Wenn dies derzeit mit:
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"
}
Aus irgendeinem Grund Rückkehr Ich kann immer noch nicht herausfinden, ist es falsche Werte, und es scheint zu kompliziert für etwas so einfach. Ich habe das Gefühl, dass es einen Weg geben muss, dies in einer Linie zu tun.
Ehrlich gesagt, sehe ich in diesem Code nichts Kompliziertes ... Willst du eine Ein-Zeilen-Lösung mit reinem 'bash'? –
Der Median eines sortierten Arrays liegt bei oder in der Nähe der Mitte; Der Median eines unsortierten Arrays könnte * überall * im Array auftreten. – chepner
Fügen Sie die zweite Zeile dieser Antwort in der Nähe der Spitze Ihrer Funktion ein ... http://stackoverflow.com/a/7442658/2836621 –