15
15
from ._utils import generate , convert
16
16
from ._typing import Iterable , Callable , Optional , _T , SupportsRichComparison , List
17
17
18
+ __all__ = ["bubble" , "insert" , "shell" , "heap" , "quick" , "merge" ]
19
+
18
20
def bubble (__iterable : Iterable [_T ], key : Optional [Callable [[_T ], SupportsRichComparison ]]= None , reverse : bool = False ) -> List [_T ]:
19
21
'''
20
- :param __iterable: iterable data.
21
- :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]).
22
+ :param __iterable: iterable data, mainly refers to `list`, `tuple`, `set`, `dict`, `str`, `zip`, `range` .
23
+ :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]), key=str.lower .
22
24
:param reverse: whether to use descending order. The default is ascending order.
25
+
26
+ :return: bubble's sorted result in a list.
23
27
'''
24
28
__iterable : List [_T ] = convert (__iterable )
25
29
compare : List [_T ] = generate (__iterable , key )
@@ -28,18 +32,20 @@ def bubble(__iterable: Iterable[_T], key: Optional[Callable[[_T], SupportsRichCo
28
32
for j in range (len (__iterable ) - i - 1 ):
29
33
if (compare [j ] < compare [j + 1 ] if reverse else compare [j ] > compare [j + 1 ]):
30
34
__iterable [j ], __iterable [j + 1 ] = __iterable [j + 1 ], __iterable [j ]
31
- flag : bool = True
32
35
if key != None :
33
36
compare [j ], compare [j + 1 ] = compare [j + 1 ], compare [j ]
37
+ flag : bool = True
34
38
if not flag :
35
39
break
36
40
return __iterable
37
41
38
42
def insert (__iterable : Iterable [_T ], key : Optional [Callable [[_T ], SupportsRichComparison ]]= None , reverse : bool = False ) -> List [_T ]:
39
43
'''
40
- :param __iterable: iterable data.
41
- :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]).
44
+ :param __iterable: iterable data, mainly refers to `list`, `tuple`, `set`, `dict`, `str`, `zip`, `range` .
45
+ :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]), key=str.lower .
42
46
:param reverse: whether to use descending order. The default is ascending order.
47
+
48
+ :return: insert's sorted result in a list.
43
49
'''
44
50
__iterable : List [_T ] = convert (__iterable )
45
51
compare : List [_T ] = generate (__iterable , key )
@@ -65,9 +71,11 @@ def insert(__iterable: Iterable[_T], key: Optional[Callable[[_T], SupportsRichCo
65
71
66
72
def shell (__iterable : Iterable [_T ], key : Optional [Callable [[_T ], SupportsRichComparison ]]= None , reverse : bool = False ) -> List [_T ]:
67
73
'''
68
- :param __iterable: iterable data.
69
- :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]).
74
+ :param __iterable: iterable data, mainly refers to `list`, `tuple`, `set`, `dict`, `str`, `zip`, `range` .
75
+ :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]), key=str.lower .
70
76
:param reverse: whether to use descending order. The default is ascending order.
77
+
78
+ :return: shell's sorted result in a list.
71
79
'''
72
80
__iterable : List [_T ] = convert (__iterable )
73
81
compare : List [_T ] = generate (__iterable , key )
@@ -88,9 +96,11 @@ def shell(__iterable: Iterable[_T], key: Optional[Callable[[_T], SupportsRichCom
88
96
89
97
def heap (__iterable : Iterable [_T ], key : Optional [Callable [[_T ], SupportsRichComparison ]]= None , reverse : bool = False ) -> List [_T ]:
90
98
'''
91
- :param __iterable: iterable data.
92
- :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]).
99
+ :param __iterable: iterable data, mainly refers to `list`, `tuple`, `set`, `dict`, `str`, `zip`, `range` .
100
+ :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]), key=str.lower .
93
101
:param reverse: whether to use descending order. The default is ascending order.
102
+
103
+ :return: heap's sorted result in a list.
94
104
'''
95
105
__iterable : List [_T ] = convert (__iterable )
96
106
compare : List [_T ] = generate (__iterable , key )
@@ -124,9 +134,11 @@ def build(root: int, end: int) -> None:
124
134
125
135
def quick (__iterable : Iterable [_T ], key : Optional [Callable [[_T ], SupportsRichComparison ]]= None , reverse : bool = False ) -> List [_T ]:
126
136
'''
127
- :param __iterable: iterable data.
128
- :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]).
137
+ :param __iterable: iterable data, mainly refers to `list`, `tuple`, `set`, `dict`, `str`, `zip`, `range` .
138
+ :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]), key=str.lower .
129
139
:param reverse: whether to use descending order. The default is ascending order.
140
+
141
+ :return: quick's sorted result in a list.
130
142
'''
131
143
__iterable : List [_T ] = convert (__iterable )
132
144
compare : List [_T ] = generate (__iterable , key )
@@ -161,17 +173,19 @@ def partition(l: int, r: int) -> int:
161
173
162
174
def merge (__iterable : Iterable [_T ], key : Optional [Callable [[_T ], SupportsRichComparison ]]= None , reverse : bool = False ) -> List [_T ]:
163
175
'''
164
- :param __iterable: iterable data.
165
- :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]).
176
+ :param __iterable: iterable data, mainly refers to `list`, `tuple`, `set`, `dict`, `str`, `zip`, `range` .
177
+ :param key: callable function, for example: key=lambda x: x[1], key=lambda x: (x[0], x[1]), key=str.lower .
166
178
:param reverse: whether to use descending order. The default is ascending order.
179
+
180
+ :return: merge's sorted result in a list.
167
181
'''
168
182
__iterable : List [_T ] = convert (__iterable )
169
183
compare : List [_T ] = generate (__iterable , key )
170
184
def merg (low : int , mid : int , high : int ) -> None :
171
185
'''
172
- :param low: The low-side cursor of __iterable (int).
173
- :param mid: The middle-side cursor of __iterable (int).
174
- :param high: The high-side cursor of __iterable (int).
186
+ :param low: The low cursor of __iterable (int).
187
+ :param mid: The middle cursor of __iterable (int).
188
+ :param high: The high cursor of __iterable (int).
175
189
'''
176
190
left : List [_T ] = __iterable [low : mid ]
177
191
lc : List [_T ] = compare [low : mid ]
@@ -212,6 +226,4 @@ def solve() -> None:
212
226
low += 2 * i
213
227
i *= 2
214
228
solve ()
215
- return __iterable
216
-
217
- __all__ = [bubble , insert , shell , heap , quick , merge ]
229
+ return __iterable
0 commit comments