我的合并排序方法不起作用,我用一些自定义方法创建了Array类,并尝试创建适当的组件来合并排序工作。 结果是返回的表填充有零和随机数,并且一直填充到内存已满。请如果您能给我一些提示,我应该注意修复它。
如果您想在这里查看它,也可以使用完整的Array类: 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);
}
答案 0 :(得分:0)
感谢我忘记在方法splitedArray
的末尾返回splitArrayForMergeSort()
,在我添加完之后,一切正常,