1- from typing import List , TypeVar
1+ from typing import TypeVar
22
33T = TypeVar ("T" )
44
55
6- def binary_search (arr : List [T ], item : T , left : int , right : int ) -> int :
6+ def binary_search (arr : list [T ], item : T , left : int , right : int ) -> int :
77 """
88 Return the index where `item` should be inserted in `arr[left:right+1]`
99 to keep it sorted.
@@ -26,7 +26,7 @@ def binary_search(arr: List[T], item: T, left: int, right: int) -> int:
2626 return left
2727
2828
29- def insertion_sort (arr : List [T ]) -> List [T ]:
29+ def insertion_sort (arr : list [T ]) -> list [T ]:
3030 """
3131 Sort the list in-place using binary insertion sort.
3232
@@ -36,18 +36,18 @@ def insertion_sort(arr: List[T]) -> List[T]:
3636 for i in range (1 , len (arr )):
3737 key = arr [i ]
3838 j = binary_search (arr , key , 0 , i - 1 )
39- arr [:] = arr [:j ] + [ key ] + arr [j :i ] + arr [i + 1 :]
39+ arr [:] = [ * arr [:j ], key , * arr [j :i ], * arr [i + 1 :] ]
4040 return arr
4141
4242
43- def merge (left : List [T ], right : List [T ]) -> List [T ]:
43+ def merge (left : list [T ], right : list [T ]) -> list [T ]:
4444 """
4545 Merge two sorted lists into one sorted list.
4646
4747 >>> merge([1, 3, 5], [2, 4, 6])
4848 [1, 2, 3, 4, 5, 6]
4949 """
50- merged = []
50+ merged : list [ T ] = []
5151 i = j = 0
5252 while i < len (left ) and j < len (right ):
5353 if left [i ] <= right [j ]:
@@ -61,7 +61,7 @@ def merge(left: List[T], right: List[T]) -> List[T]:
6161 return merged
6262
6363
64- def tim_sort (arr : List [T ]) -> List [T ]:
64+ def tim_sort (arr : list [T ]) -> list [T ]:
6565 """
6666 Simplified version of TimSort for educational purposes.
6767
@@ -91,14 +91,14 @@ def tim_sort(arr: List[T]) -> List[T]:
9191 if n == 1 :
9292 return arr .copy ()
9393
94- runs = []
94+ runs : list [ list [ T ]] = []
9595 for start in range (0 , n , min_run ):
9696 end = min (start + min_run , n )
9797 run = insertion_sort (arr [start :end ])
9898 runs .append (run )
9999
100100 while len (runs ) > 1 :
101- new_runs = []
101+ new_runs : list [ list [ T ]] = []
102102 for i in range (0 , len (runs ), 2 ):
103103 if i + 1 < len (runs ):
104104 new_runs .append (merge (runs [i ], runs [i + 1 ]))
0 commit comments