diff --git a/TP9/tri-fusion/merge_sort.py b/TP9/tri-fusion/merge_sort.py index 7dbe602630e675e05b650994353fcaa4ef821ff0..0c9e81d7bee4cee112a4f329d1e93dce5ab324e0 100755 --- a/TP9/tri-fusion/merge_sort.py +++ b/TP9/tri-fusion/merge_sort.py @@ -166,15 +166,18 @@ def merge(l1: ApLst, l2: ApLst, $$$ list_to_native(merge(native_to_list([1, 3, 4, 9]), native_to_list([1, 2, 5]))) [1, 1, 2, 3, 4, 5, 9] """ - if not (l1.is_empty() or l2.is_empty()): - if comp(l1.head(),l2.head())<0: - return ApLst(l1.head(),merge(l1.tail(),l2)) + if (not l1.is_empty()) and (not l2.is_empty()): + h1,h2= l1.head(),l2.head() + if comp(h1,h2)<=0: + res= ApLst(h1,merge(l1.tail(),l2)) else: - return ApLst(l2.head(),merge(l1,l2.tail())) - elif not l1.is_empty(): - return l1 - elif not l2.is_empty(): - return l2 + res= ApLst(h2,merge(l1,l2.tail())) + else: + if l1.is_empty(): + res= l2 + else: + res= l1 + return res def mergesort(l: ApLst, comp: Callable[[T, T], int]=compare) -> ApLst: """ @@ -194,7 +197,12 @@ def mergesort(l: ApLst, comp: Callable[[T, T], int]=compare) -> ApLst: $$$ is_sorted(l1) True """ - ... + l1,l2=split(l) + if length(l)<=2: + return merge(l1,l2) + else: + return merge(mergesort(l1),mergesort(l2)) + if (__name__ == '__main__'):