|
@@ -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;
|
|
|
-}
|
|
|
+}
|