мой метод сортировки слиянием не работает так, как я хочу, я создал Array Class с некоторыми пользовательскими методами и попытался создать надлежащие компоненты для работы сортировки слиянием.В результате возвращаемая таблица заполняется нулями и случайными числами и заполняется до заполнения памяти.Пожалуйста, если бы Вы могли дать мне несколько советов, что я должен обратить внимание, чтобы исправить это.
также полный класс массива, если вы хотите посмотреть его здесь: https://codeshare.io/5Xnk9Y
Заранее благодарен за любую помощь.
Array Array::merge(Array left, Array right, Array mergedArray)
{
int i,j,k,nL,nR;
i=j=k=0;
nL = left.GetNumberOfElements();
nR = right.GetNumberOfElements();
while(i < nL && j < nR)
{
if (left.GetElementWithIndex(i) <= right.GetElementWithIndex(j))
{
mergedArray.SetElementWithIndex(k, left.GetElementWithIndex(i));
i++;
k++;
}else
{
mergedArray.SetElementWithIndex(k, right.GetElementWithIndex(j));
k++;
j++;
}
}
while (i < nL){
mergedArray.SetElementWithIndex(k,left.GetElementWithIndex(i));
i++;
k++;
}
while (j < nR){
mergedArray.SetElementWithIndex(k, right.GetElementWithIndex(j));
j++;
k++;
}
return mergedArray;
}
Array Array::splitArrayForMergeSort(Array splitedArray)
{
int length;
length = splitedArray.GetNumberOfElements();
if(length < 2) return splitedArray;
int middle;
if(length %2 == 1) middle = (length-1)/2;
else middle = length/2;
Array left;
Array right;
for (int i = 0 ; i < middle ; i++){
left.AddElement(splitedArray[i]);
}
for (int i = middle ; i < length ; i++){
right.AddElement(splitedArray[i]);
}
splitArrayForMergeSort(left);
splitArrayForMergeSort(right);
merge(left, right, splitedArray);
}
void Array::MergeSort()
{
Array arr;
for (int i = 0 ; i < numberOfElements ; i++){
arr.AddElement(array[i]);
}
arr = splitArrayForMergeSort(arr);
}