Skip to content

Instantly share code, notes, and snippets.

@mpenkov
Last active December 10, 2015 05:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mpenkov/4385791 to your computer and use it in GitHub Desktop.
Save mpenkov/4385791 to your computer and use it in GitHub Desktop.
merge sort in Python
def mergesort(array, start, end):
if end - start < 2:
#
# Do nothing.
#
return
half = (end-start)/2
#
# Divide and conquer step.
#
mergesort(array, start, start+half)
mergesort(array, start+half, end)
#
# Merge using temporary storage.
#
tmp = list()
left = start
right = start+half
for i in range(end-start):
if left == start+half:
assert right < end
advance_left = False
elif right == end:
assert left < start+half
advance_left = True
else:
advance_left = array[left] < array[right]
if advance_left:
tmp.append(array[left])
left += 1
else:
tmp.append(array[right])
right += 1
#
# Copy temporary storage back into input array.
#
for i,val in enumerate(tmp):
array[start+i] = val
if __name__ == "__main__":
array = range(100)
import random
random.shuffle(array)
mergesort(array, 0, len(array))
print array == sorted(array)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment