50 lines
1.3 KiB
Python
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
|