Нет другого способа сделать это, кроме как ответить здесь.Если вы собираетесь позвонить new
, сделайте соответствующий вызов delete
.
rand()
не так уж случайно, рассмотрите возможность использования случайной библиотеки C ++ 11.
Для краткости я не включил ваш алгоритм, но я не вносил в него никаких изменений.Я запустил этот код как в Ubuntu, так и в MacOS.
int main() {
// Here are 50 random numbers I get when I use your method, I have put
// them in a vector.
std::vector<int> v = {7, 49, 89, 74, 34, 8, 24, 62, 35, 13, 24, 53,12,
2, 51, 71, 55, 49, 88, 52, 15, 49, 45, 5, 88, 21,
75, 54, 8, 7, 25, 50, 8, 19, 2, 33, 19, 13, 3, 69,
31, 80, 49, 72, 77, 65, 44, 43};
// I set the size of the vector to be the size of this raw array.
unsigned int length = v.size();
int* numbers= new int[length];
for(int i = 0; i < length; i++)
numbers[i] = v[i];
// 7 49 89 74 34 8 24 62 35 13 24 53 12 2 51 71 55...
for (int i = 0; i < length; i++)
std::cout << numbers[i] << " ";
std::cout << std::endl;
unsigned int depth = recurse(numbers, length);
// 5 2 3 2 7 7 8 12 8 13 8 13 15 19 19 24...
for (int i = 0; i < length; i++)
std::cout << numbers[i] << " ";
delete[] numbers;
return 0;
}
Мне очень интересно, что здесь происходит.Может быть, я как-то ошибаюсь, но в любом случае надеюсь, что это поможет (по крайней мере, одному из нас).
Что касается причины, по которой мой ответ может иметь значение, так это то, что когда я запускаю ваш алгоритм слияния, он обнуляет все вмассив за исключением последнего элемента в массиве.Если это действительно так, возможно, кто-то другой может это подтвердить, то, вероятно, он делает это более эффективно, чем сортирует ваша быстрая сортировка.
Best,