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] 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 []