From 4c872c23a605b7144ea5e9fbd835580a6d834735 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 3 Mar 2017 18:44:09 +0100 Subject: [PATCH] Properly handle memory management for merge sort implementation. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- TP3/tp3.c | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/TP3/tp3.c b/TP3/tp3.c index 8baa7dc..75c3195 100644 --- a/TP3/tp3.c +++ b/TP3/tp3.c @@ -12,40 +12,39 @@ void TriFusion(int T[], int n) { int i = 0, j = 0, k = 0; int* T1; int* T2; - - T1 = malloc(n/2*sizeof(int)); - T2 = malloc(n/2*sizeof(int)); if (n > 1) { + T1 = malloc(n/2*sizeof(int)); + T2 = malloc(n/2*sizeof(int)); for (int i = 0; i < n/2; i++) { T1[i] = T[i]; T2[i] = T[i + n/2]; } - TriFusion(T1, n/2); - TriFusion(T2, n/2); - while (k < n/2 && j < n/2) { - if (T1[k] <= T2[j]) { + TriFusion(T1, n/2); + TriFusion(T2, n/2); + while (k < n/2 && j < n/2) { + if (T1[k] <= T2[j]) { + T[i] = T1[k]; + i++; + k++; + } else { + T[i] = T2[j]; + i++; + j++; + } + } + while (k < n/2) { T[i] = T1[k]; i++; k++; - } else { + } + while (j < n/2) { T[i] = T2[j]; i++; j++; - } - } - while (k < n/2) { - T[i] = T1[k]; - i++; - k++; - } - while (j < n/2) { - T[i] = T2[j]; - i++; - j++; - } - free(T1); - free(T2); + } + free(T1); + free(T2); } } -- 2.34.1