合并排序不排序自己创建的数组类C ++

时间:2018-10-16 15:18:48

标签: c++ mergesort

我的合并排序方法不起作用,我用一些自定义方法创建了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);
}

1 个答案:

答案 0 :(得分:0)

感谢我忘记在方法splitedArray的末尾返回splitArrayForMergeSort(),在我添加完之后,一切正常,