合并排序对象,不确定出了什么问题

Mergesorting an object, not sure what goes wrong

那么问题来了:

我一直在尝试对包含 3 个整数的对象数组应用合并排序,就定义谁比另一个更大而言,我确信它是正确的。

我的问题是(我认为)它在递归位中工作得不好。

所以这是一项家庭作业,我们没有被要求使用归并排序,但我几天前读到过它,我正在尝试学习新事物,我已经成功地定期应用它只有整数的数组,但这里出了点问题:

1) "R" 数组接收垃圾值。 2) leftCount 和 rightCount 的值小于它们应有的值(尽管这可能是因为合并排序作为递归的一部分就是这样工作的)。

我可以回到只使用一些简单的东西,但我真的很想把它做好,希望能得到帮助。

因此,数字是一个日期,isBefore() 函数检查哪个先出现。我检查了它,它工作正常,如果你需要我可以添加它。

大小 = 30; MyDate 包含:int 日、月、年。 日历包含:MyDate 数组[SIZE].

//using mergeSort algorithm
void Calendar::sortDates()
{
    int n = SIZE;
    MergeSort(_dates,n);
    //still need to add 0 - s in the end
}

void Calendar::MergeSort(MyDate* _dates,int n)
{
    int mid, i;
    MyDate *L, *R;

    if (n < 2) return;//base condition for recursion

    mid = n / 2;
    L = new MyDate[mid * sizeof(MyDate)];
    R = new MyDate[(n - mid) * sizeof(MyDate)];


    for (i = 0; i < mid; i++)
    {
        L[i] = _dates[i]; //creating left sub_array
    }

    for (i = mid; i < n; i++) 
        R[i] = _dates[i]; //creating right sub_array

    MergeSort(L, mid);
    MergeSort(R, n - mid);
    Merge(_dates, L, mid, R, n - mid);
}
void Calendar::Merge(MyDate * _dates, MyDate * L, int leftCount, MyDate * R, int rightCount)
{
    int i = 0, j = 0, k = 0;
    bool ok = false;
    MyDate max = _dates[0];
    while (i < leftCount && j < rightCount)
    {
        ok = L[i].isBefore(R[j]);
        if (!ok)
        {
            _dates[k++] = L[i++]; 
        }

        else _dates[k++] = R[j++];
    }
    while (i < leftCount)
    _dates[k++] = L[i++];
    while (j < rightCount) 
    _dates[k++] = R[j++];
}

您分配了不必要的 space:

L = new MyDate[mid * sizeof(MyDate)];
R = new MyDate[(n - mid) * sizeof(MyDate)];
// should be
L = new MyDate[mid];
R = new MyDate[n - mid];

而右子数组是垃圾的原因大概是:

for (i = mid; i < n; i++) 
    R[i] = _dates[i];
// should be
for (i = 0; i < n - mid; i++) 
    R[i] = _dates[mid+i];

可能还有其他问题,我一眼就注意到了这两个