当我运行代码时,我会得到很多重复的数字和/或大的负数,当你把东西添加到数组中时通常会出现这些数字和/或大的负数。我相信问题出在我自己进行合并时。
void mergeSort( int list[], int lb, int ub )
{
int mid;
if ( lb < ub )
{
mid = (lb + ub) / 2;
mergeSort(list, lb, mid);
mergeSort(list, mid + 1, ub);
myMerge(list, lb, mid , ub);
}
}
template <class M>
void myMerge( M list[], int lb, int mid, int ub )
{
int i, j;
int size1 = mid - lb + 1;
int size2 = ub - mid;
M* tmpArray1 = new M[size1 + 1];
M* tmpArray2 = new M[size2 + 1];
for( i=0; i<size1; i++ )
{
tmpArray1[i] = list[lb + i - 1];
}
for( j=0; j<size2; j++ )
{
tmpArray2[j] = list[mid + j];
}
tmpArray1[size1 + 1] = INT_MAX;
tmpArray2[size2 + 1] = INT_MAX;
i = 0;
j = i;
for( int k=lb; k<ub; k++ )
{
if ( tmpArray1[i] <= tmpArray2[j] )
{
list[k] = tmpArray1[i];
i++;
}
else
{
list[k] = tmpArray2[j];
j++;
}
}
}
这可能是像迭代问题这样愚蠢的事情......有什么想法吗?