Browse Source

swapped order of memory allocation for merge sort

Kajetan Johannes Hammerle 3 years ago
parent
commit
60ba41f5fa
1 changed files with 10 additions and 8 deletions
  1. 10 8
      merge_sort/Main.cpp

+ 10 - 8
merge_sort/Main.cpp

@@ -18,24 +18,26 @@ int randomInt()
 
 template <typename T> T *mergeSort(const T *in, int size, int (*key)(const T &))
 {
-    T *out = new T[size];
-    for (int i = 0; i < size; ++i)
-    {
-        out[i] = in[i];
-    }
     if (size <= 1)
     {
+        T *out = new T[size];
+        for (int i = 0; i < size; ++i)
+        {
+            out[i] = in[i];
+        }
         return out;
     }
 
     // split
     int sizeLeft = size / 2;
     int sizeRight = (size + 1) / 2;
-    T *left = out;
-    T *right = out + sizeLeft;
+    const T *left = in;
+    const T *right = in + sizeLeft;
     left = mergeSort(left, sizeLeft, key);
     right = mergeSort(right, sizeRight, key);
 
+    T *out = new T[size];
+
     // merge
     int rightCounter = 0;
     int leftCounter = 0;
@@ -154,4 +156,4 @@ int main()
     structTest();
     pointerTest();
     return 0;
-}
+}