From db52ade16297dd92b036d42a47a2dc0c8094dc30 Mon Sep 17 00:00:00 2001 From: bpiper02 Date: Wed, 9 Sep 2026 19:14:54 -0400 Subject: [PATCH] Make gnome sort generic over comparable items --- sorts/gnome_sort.py | 10 ++++++++-- tests/test_sorts.py | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/sorts/gnome_sort.py b/sorts/gnome_sort.py index 3002bc6a8b18..ae0d38ab3fa9 100644 --- a/sorts/gnome_sort.py +++ b/sorts/gnome_sort.py @@ -12,8 +12,14 @@ python3 gnome_sort.py """ +from typing import Protocol -def gnome_sort(lst: list) -> list: + +class Comparable(Protocol): + def __lt__(self, other: object, /) -> bool: ... + + +def gnome_sort[T: Comparable](lst: list[T]) -> list[T]: """ Pure implementation of the gnome sort algorithm in Python @@ -39,7 +45,7 @@ def gnome_sort(lst: list) -> list: i = 1 while i < len(lst): - if lst[i - 1] <= lst[i]: + if not lst[i] < lst[i - 1]: i += 1 else: lst[i - 1], lst[i] = lst[i], lst[i - 1] diff --git a/tests/test_sorts.py b/tests/test_sorts.py index 05c3c747b95a..3dfac94e7fed 100644 --- a/tests/test_sorts.py +++ b/tests/test_sorts.py @@ -96,6 +96,7 @@ def test_sort_matches_builtin(sort, case): bubble_sort_iterative, bubble_sort_recursive, circle_sort, + gnome_sort, insertion_sort, merge_sort, selection_sort,