Итак, я только что закончил реализацию сортировки слияния, но мне пришло в голову, что я не удалял память, возвращаемую из рекурсивных вызовов, которые я отбрасывал, поэтому я добавил инструкции delete для array1 и array2, а затем вдруг мой сортировка слияния doesn Не работает ..... Почему добавление операторов удаления ближе к концу моей функции все испортило? Нужно ли мне освобождать память?Удалить Память выделена в другой функции?
Код ниже:
/**
* Runs merge sort on this ArrayList<T>. Interface function to the central,
* recursive, merge sort function.
*/
template<class T>
void ArrayList<T>::mergeSort() {
T* temp = mergeSort(array, size);
delete [] array;
array = temp;
}
/**
* Runs merge sort on the passed in array. Recursive.
*
* @param array the array to sort.
* @param arraySize the size of the array that is to be sorted.
* @return the sorted array.
*/
template<class T>
T* ArrayList<T>::mergeSort(T* array, int arraySize) {
T* returnArray = array;
//If the array is more than one element.
if (arraySize > 1) {
int size1 = arraySize/2;
int size2 = arraySize - size1;
T* array1;
T* array2;
//Recurse.
array1 = mergeSort(array, size1);
array2 = mergeSort(array + size1, size2);
returnArray = new T[arraySize];
//Loop through all elements in returnArray.
int i = 0, j = 0, k = 0;
while (i < arraySize) {
//Place the lesser of two elements in returnArray.
if ((array1[j] <= array2[k] && j < size1)
|| k == size2) {
returnArray[i] = array1[j];
j++;
}
else {
returnArray[i] = array2[k];
k++;
}
i++;
}
/--- таковы удалений РЕЧЬ !! -----/
delete [] array1;
delete [] array2;
}
return returnArray;
}
Когда вы говорите: «внезапно мой сортировка слияния не работает», что вы имеете в виду? Это крушение? Производит ли он неправильные результаты? Что-то другое? Вы должны быть более конкретными и сообщать нам какие-либо конкретные сообщения об ошибках, которые вы видите. – user1118321
Не была указана конкретная ошибка, я запускаю ее, она падает ... довольно внезапно;) – Ethan