Skip to content

Instantly share code, notes, and snippets.

@romansky
Last active December 12, 2015 04:28
Show Gist options
  • Save romansky/4713930 to your computer and use it in GitHub Desktop.
Save romansky/4713930 to your computer and use it in GitHub Desktop.
Recursive merge sort, written in CoffeeScript
nums = [8,7,9,6,5,4,3,2,1,0]
mergeSort = (list)->
if list.length <= 1 then return list
left = []
right = []
for x in list
if left.length < Math.floor(list.length / 2) then left.push(x)
else right.push(x)
left = mergeSort(left)
right = mergeSort(right)
return merge(left, right)
merge = (left, right)->
result = []
ll = left.length
rl = right.length
while ll > 0 || rl > 0
if ll > 0 and rl > 0
if left[left.length - ll] > right[right.length - rl]
result.push left[left.length - ll]
ll -= 1
else
result.push right[right.length - rl]
rl -= 1
else if ll > 0
result.push left[left.length - ll]
ll -= 1
else if rl > 0
result.push right[right.length - rl]
rl -= 1
return result
res = mergeSort(nums)
console.log res
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment