From 08f9356c96bdbdd350c61bf3496417debd550a78 Mon Sep 17 00:00:00 2001 From: 0x <129736887+itsnevu@users.noreply.github.com> Date: Tue, 15 Sep 2026 16:49:08 +0700 Subject: [PATCH] sorts: type double_sort for any comparable items --- sorts/double_sort.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/sorts/double_sort.py b/sorts/double_sort.py index bd5fdca1e63c..3886c570c1e8 100644 --- a/sorts/double_sort.py +++ b/sorts/double_sort.py @@ -1,11 +1,15 @@ -from typing import Any +from typing import Protocol -def double_sort(collection: list[Any]) -> list[Any]: +class Comparable(Protocol): + def __lt__(self, other: object, /) -> bool: ... + + +def double_sort[T: Comparable](collection: list[T]) -> list[T]: """This sorting algorithm sorts an array using the principle of bubble sort, but does it both from left to right and right to left. Hence, it's called "Double sort" - :param collection: mutable ordered sequence of elements + :param collection: mutable ordered sequence of comparable elements :return: the same collection in ascending order Examples: >>> double_sort([-1 ,-2 ,-3 ,-4 ,-5 ,-6 ,-7]) @@ -16,6 +20,14 @@ def double_sort(collection: list[Any]) -> list[Any]: [-6, -5, -4, -3, -2, -1] >>> double_sort([-3, 10, 16, -42, 29]) == sorted([-3, 10, 16, -42, 29]) True + >>> double_sort(["c", "a", "b"]) + ['a', 'b', 'c'] + >>> double_sort([2.5, -1, 0.0]) + [-1, 0.0, 2.5] + >>> double_sort([1, "a"]) + Traceback (most recent call last): + ... + TypeError: '<' not supported between instances of 'str' and 'int' """ no_of_elements = len(collection) for _ in range(