2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,24 +1,14 @@
|
|||
defmodule Sort do
|
||||
def counting_sort([]), do: []
|
||||
def counting_sort(list) do
|
||||
{min, max} = minmax(list)
|
||||
count = List.to_tuple(for _ <- min..max, do: 0)
|
||||
{min, max} = Enum.min_max(list)
|
||||
count = Tuple.duplicate(0, max - min + 1)
|
||||
counted = Enum.reduce(list, count, fn x,acc ->
|
||||
i = x - min
|
||||
put_elem(acc, i, elem(acc, i) + 1)
|
||||
end)
|
||||
Enum.reduce(max..min, [], fn n,acc ->
|
||||
m = elem(counted, n - min)
|
||||
List.duplicate(n, m) ++ acc
|
||||
end)
|
||||
Enum.flat_map(min..max, &List.duplicate(&1, elem(counted, &1 - min)))
|
||||
end
|
||||
|
||||
defp minmax([h|t]), do: minmax(t, h, h)
|
||||
|
||||
defp minmax([], min, max), do: {min, max}
|
||||
defp minmax([h|t], min, max) when h<min, do: minmax(t, h, max)
|
||||
defp minmax([h|t], min, max) when max<h, do: minmax(t, min, h)
|
||||
defp minmax([_|t], min, max) , do: minmax(t, min, max)
|
||||
end
|
||||
|
||||
IO.inspect Sort.counting_sort([1,-2,-3,2,1,-5,5,5,4,5,9])
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
sub counting-sort (@ints) {
|
||||
my $off = @ints.min;
|
||||
(my @counts)[$_ - $off]++ for @ints;
|
||||
@counts.kv.map: { ($^k + $off) xx ($^v // 0) }
|
||||
flat @counts.kv.map: { ($^k + $off) xx ($^v // 0) }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
function countingSort($array) {
|
||||
$minmax = $array | Measure-Object -Minimum -Maximum
|
||||
$min, $max = $minmax.Minimum, $minmax.Maximum
|
||||
$count = @(0) * ($max - $min + 1)
|
||||
foreach ($number in $array) {
|
||||
$count[$number - $min] = $count[$number - $min] + 1
|
||||
}
|
||||
$z = 0
|
||||
foreach ($i in $min..$max) {
|
||||
while (0 -lt $count[$i - $min]) {
|
||||
$array[$z] = $i
|
||||
$z = $z+1
|
||||
$count[$i - $min] = $count[$i - $min] - 1
|
||||
}
|
||||
}
|
||||
$array
|
||||
}
|
||||
|
||||
$array = foreach ($i in 1..50) {Get-Random -Minimum 0 -Maximum 26}
|
||||
"$array"
|
||||
"$(countingSort $array)"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
def countSort(input: List[Int], min: Int, max: Int): List[Int] =
|
||||
input.foldLeft(Array.fill(max - min + 1)(0)) { (arr, n) =>
|
||||
arr(n - min) += 1
|
||||
arr
|
||||
}.zipWithIndex.reverse.foldLeft(List[Int]()) {
|
||||
case (lst, (cnt, ndx)) => List.fill(cnt)(ndx + min) ::: lst
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue