Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,26 @@
|
|||
def merge = { List left, List right ->
|
||||
List mergeList = []
|
||||
while (left && right) {
|
||||
print "."
|
||||
mergeList << ((left[-1] > right[-1]) ? left.pop() : right.pop())
|
||||
}
|
||||
mergeList = mergeList.reverse()
|
||||
mergeList = left + right + mergeList
|
||||
}
|
||||
|
||||
def mergeSort;
|
||||
mergeSort = { List list ->
|
||||
|
||||
def n = list.size()
|
||||
if (n < 2) return list
|
||||
|
||||
def middle = n.intdiv(2)
|
||||
def left = [] + list[0..<middle]
|
||||
def right = [] + list[middle..<n]
|
||||
left = mergeSort(left)
|
||||
right = mergeSort(right)
|
||||
|
||||
if (left[-1] <= right[0]) return left + right
|
||||
|
||||
merge(left, right)
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
println (mergeSort([23,76,99,58,97,57,35,89,51,38,95,92,24,46,31,24,14,12,57,78,4]))
|
||||
println (mergeSort([88,18,31,44,4,0,8,81,14,78,20,76,84,33,73,75,82,5,62,70,12,7,1]))
|
||||
println ()
|
||||
println (mergeSort([10, 10.0, 10.00, 1]))
|
||||
println (mergeSort([10, 10.00, 10.0, 1]))
|
||||
println (mergeSort([10.0, 10, 10.00, 1]))
|
||||
println (mergeSort([10.0, 10.00, 10, 1]))
|
||||
println (mergeSort([10.00, 10, 10.0, 1]))
|
||||
println (mergeSort([10.00, 10.0, 10, 1]))
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
split = { list ->
|
||||
list.collate((list.size()+1)/2 as int)
|
||||
}
|
||||
|
||||
merge = { left, right, headBuffer=[] ->
|
||||
if(left.size() == 0) headBuffer+right
|
||||
else if(right.size() == 0) headBuffer+left
|
||||
else if(left.head() <= right.head()) merge.trampoline(left.tail(), right, headBuffer+left.head())
|
||||
else merge.trampoline(right.tail(), left, headBuffer+right.head())
|
||||
}.trampoline()
|
||||
|
||||
mergesort = { List list ->
|
||||
if(list.size() < 2) list
|
||||
else merge(split(list).collect {mergesort it})
|
||||
}
|
||||
|
||||
assert mergesort((500..1)) == (1..500)
|
||||
assert mergesort([5,4,6,3,1,2]) == [1,2,3,4,5,6]
|
||||
assert mergesort([3,3,1,4,6,78,9,1,3,5]) == [1,1,3,3,3,4,5,6,9,78]
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
split = { list, left=[], right=[] ->
|
||||
if(list.size() <2) [list+left, right]
|
||||
else split.trampoline(list.tail().tail(), [list.head()]+left,[list.tail().head()]+right)
|
||||
}.trampoline()
|
||||
Loading…
Add table
Add a link
Reference in a new issue