Averages/Median: Difference between revisions

From Rosetta Code
Content added Content deleted
m (→‎{{header|Java}}: stopped the solution from being insanely slow...)
(add Ruby)
Line 12: Line 12:
return list.get((list.size()-1)/2);
return list.get((list.size()-1)/2);
}</lang>
}</lang>

=={{header|Ruby}}==
<lang ruby>def median(ary)
return nil if ary.empty?
mid, rem = ary.length.divmod(2)
if rem == 0
ary.sort[mid-1,2].inject(:+) / 2.0
else
ary.sort[mid]
end
end

p median([]) # => nil
p median([5,3,4]) # => 4
p median([5,4,2,3]) # => 3.5
p median([3,4,1,-8.4,7.2,4,1,1.2]) # => 2.1</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==

Revision as of 14:30, 12 June 2009

Task
Averages/Median
You are encouraged to solve this task according to the task description, using any language you may know.

Write a program to find the median value of a vector of floating-point numbers. The program need not handle the case where the vector is empty, but must handle the case where there are an even number of elements.

See also

Java

Works with: Java version 1.5+

<lang java5>public static double median(List<Double> list){

  Collections.sort(list);
  if(list.size() % 2 == 0){
     return (list.get((list.size()) / 2) + list.get((list.size()) / 2 - 1)) / 2;
  }
  return list.get((list.size()-1)/2);

}</lang>

Ruby

<lang ruby>def median(ary)

 return nil if ary.empty?
 mid, rem = ary.length.divmod(2)
 if rem == 0
   ary.sort[mid-1,2].inject(:+) / 2.0
 else
   ary.sort[mid]
 end

end

p median([]) # => nil p median([5,3,4]) # => 4 p median([5,4,2,3]) # => 3.5 p median([3,4,1,-8.4,7.2,4,1,1.2]) # => 2.1</lang>

Tcl

<lang tcl>proc median args {

   set list [lsort -real $args]
   set len [llength $list]
   # Odd number of elements
   if {$len & 1} {
       return [lindex $list [expr {($len-1)/2}]]
   }
   # Even number of elements
   set idx2 [expr {$len/2}]
   set idx1 [expr {$idx2-1}]
   return [expr {
       ([lindex $list $idx1] + [lindex $list $idx2])/2.0
   }]

}

puts [median 3.0 4.0 1.0 -8.4 7.2 4.0 1.0 1.2]; # --> 2.1</lang>