Skip to content

Instantly share code, notes, and snippets.

@graingert
Last active June 25, 2022 08:35
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 graingert/00172a62c3c69a0a0fed8fb6f026b97e to your computer and use it in GitHub Desktop.
Save graingert/00172a62c3c69a0a0fed8fb6f026b97e to your computer and use it in GitHub Desktop.
import timeit, random
import heapq
random.seed(42)
left = []
right = []
# Create two sorted lists of integers
n = 0
for i in range(100000):
n += random.randint(1, 10)
left.append(n)
n = 0
for i in range(100000):
n += random.randint(1, 10)
right.append(n)
def merge():
sortedResult = []
iLeft = 0
iRight = 0
while (len(sortedResult) < (len(left) + len(right))):
# Append the smaller of left & right's value to `sortedResult`.
if left[iLeft] < right[iRight]:
sortedResult.append(left[iLeft])
iLeft += 1
else:
sortedResult.append(right[iRight])
iRight += 1
# If one of the pointers has reached the end of its list,
# put the rest of the other list into `sortedResult`.
if iLeft == len(left):
sortedResult.extend(right[iRight:])
break
elif iRight == len(right):
sortedResult.extend(left[iLeft:])
break
def heapq_merge(_heapq_merge=heapq.merge, _list=list):
_list(_heapq_merge(left, right))
def appendAndSort():
sortedResult = left + right
sortedResult.sort()
def appendAndSorted(_sorted=sorted):
sortedResult = _sorted(left + right)
n = 100
print(f"{timeit.timeit('merge()', globals=globals(), number=n)=}")
print(f"{timeit.timeit('appendAndSort()', globals=globals(), number=n)=}")
print(f"{timeit.timeit('appendAndSorted()', globals=globals(), number=n)=}")
print(f"{timeit.timeit('heapq_merge()', globals=globals(), number=n)=}")
@graingert
Copy link
Author

python3.11 bench.py
timeit.timeit('merge()', globals=globals(), number=n)=4.3249221649894025
timeit.timeit('appendAndSort()', globals=globals(), number=n)=0.3564075309986947
timeit.timeit('appendAndSorted()', globals=globals(), number=n)=0.6240958970010979
timeit.timeit('heapq_merge()', globals=globals(), number=n)=2.1957497320108814

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment