コードを実行すると、配列に何かを追加するのを間違えたときに通常そこにある、多くの繰り返しの数字や大きな負の値が得られます。問題は、マージ自体を行っているときだと思います。
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++;
}
}
}
それはおそらく反復問題のようなばかげたものです...何かアイデアはありますか?