From 88de55c5c4b944ddd15c8948de41b2fadfb52dc7 Mon Sep 17 00:00:00 2001 From: "nikhil.mewar@valiancesolutions.com" Date: Tue, 15 Sep 2026 18:22:17 +0530 Subject: [PATCH 1/3] sorts: make strand sort work with comparable types --- sorts/strand_sort.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sorts/strand_sort.py b/sorts/strand_sort.py index 4cadd396178e..258fd23d0d01 100644 --- a/sorts/strand_sort.py +++ b/sorts/strand_sort.py @@ -1,7 +1,19 @@ import operator +from typing import Protocol, TypeVar -def strand_sort(arr: list, reverse: bool = False, solution: list | None = None) -> list: +class Comparable(Protocol): + def __lt__(self, other: object, /) -> bool: ... + + def __gt__(self, other: object, /) -> bool: ... + + +T = TypeVar("T", bound=Comparable) + + +def strand_sort( + arr: list[T], reverse: bool = False, solution: list[T] | None = None +) -> list[T]: """ Strand sort implementation source: https://en.wikipedia.org/wiki/Strand_sort @@ -16,6 +28,10 @@ def strand_sort(arr: list, reverse: bool = False, solution: list | None = None) >>> strand_sort([4, 2, 5, 3, 0, 1], reverse=True) [5, 4, 3, 2, 1, 0] + + >>> strand_sort(["banana", "apple", "cherry"]) + ['apple', 'banana', 'cherry'] + """ _operator = operator.lt if reverse else operator.gt solution = solution or [] From 02285d6c908302171108013675c18d5ea31ac8aa Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Mon, 21 Sep 2026 18:37:59 +0200 Subject: [PATCH 2/3] Add type parameter to strand_sort function --- sorts/strand_sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorts/strand_sort.py b/sorts/strand_sort.py index 258fd23d0d01..ee41aa5df51d 100644 --- a/sorts/strand_sort.py +++ b/sorts/strand_sort.py @@ -11,7 +11,7 @@ def __gt__(self, other: object, /) -> bool: ... T = TypeVar("T", bound=Comparable) -def strand_sort( +def strand_sort[T]( arr: list[T], reverse: bool = False, solution: list[T] | None = None ) -> list[T]: """ From 8a1fb51d49edf1c71d65c954668f5e6da7ef8672 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Mon, 21 Sep 2026 18:46:38 +0200 Subject: [PATCH 3/3] Add strand_sort to sorting tests --- tests/test_sorts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_sorts.py b/tests/test_sorts.py index 2c9b79aa4bfe..5a37fe67824f 100644 --- a/tests/test_sorts.py +++ b/tests/test_sorts.py @@ -122,6 +122,7 @@ def test_sort_matches_builtin(sort, case) -> None: insertion_sort, merge_sort, selection_sort, + strand_sort, ], ids=lambda f: f.__name__, )