reflex/benchmarks/test_sort.py
2025-01-28 14:12:37 -08:00

50 lines
1.3 KiB
Python

import random
def bubble_sort(arr: list[int]) -> list[int]:
result = arr[:]
for _ in range(len(result)):
for j in range(len(result) - 1):
if result[j] > result[j + 1]:
result[j], result[j + 1] = result[j + 1], result[j]
return result
def merge(sorted_left: list[int], sorted_right: list[int]) -> list[int]:
result = []
left = right = 0
while left < len(sorted_left) and right < len(sorted_right):
if sorted_left[left] < sorted_right[right]:
result.append(sorted_left[left])
left += 1
else:
result.append(sorted_right[right])
right += 1
result.extend(sorted_left[left:])
result.extend(sorted_right[right:])
return result
def merge_sort(arr: list[int]) -> list[int]:
if len(arr) <= 1:
return arr
left = merge_sort(arr[: len(arr) // 2])
right = merge_sort(arr[len(arr) // 2 :])
return merge(left, right)
SORTED_ARRAY = list(range(1000))
SHUFFLED_ARRAY = SORTED_ARRAY[:]
random.shuffle(SHUFFLED_ARRAY)
def test_bubble_sort(benchmark):
result = benchmark(bubble_sort, SHUFFLED_ARRAY)
assert result == SORTED_ARRAY
def test_merge_sort(benchmark):
result = benchmark(merge_sort, SHUFFLED_ARRAY)
assert result == SORTED_ARRAY