所以這個問題:Mergesorting對象,不知道哪裏出了問題
我一直在試圖包含3個整數對象的數組上應用歸併,在界定方面誰比其他我更大肯定它的正確性。
我的問題是(我認爲)它不適用於遞歸位。
所以這是一項家庭作業,我們沒有被要求使用mergesort,但是我前幾天已經閱讀過它,我正在嘗試學習新的東西,我已經成功地將它應用於常規數組只有整數,但這裏出了點問題:
1)「R」數組接收垃圾值。 2)leftCount和rightCount的值比它們應該小(儘管這可能是因爲mergesort如何作爲遞歸的一部分工作)。
我可以回去只使用一些簡單的東西,但我真的想要得到它,並會很感激幫助。
所以,這些數字是一個日期,而isBefore()函數會檢查哪一個是第一個。我檢查了它,它工作正常,我可以添加它,如果你想我。
SIZE = 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++];
}
你永遠不會在這裏找到家庭作業標籤..並重新提出了它的問題,它很不清楚你想問什麼.. – Arvindsinc2
好吧,我記得它是從我讀一些帖子的要求...我的問題是什麼是錯的代碼,爲什麼它接收垃圾值? – Royi