【发布时间】:2014-05-07 01:50:17
【问题描述】:
由于某种原因,我的程序在这个 mergeSort 函数中不断崩溃,该函数的目的只是对数据数组进行合并排序。在本例中,我使用的是字符串数组。
这里是归并排序函数代码:
template <class T>
void Metrics<T>::mergeSort(T *arr, int n)
{
if ( n < 10 )
{
insertionSort(arr,n);
return;
}
int mid = n / 2;
int mid2 = n - mid;
T *Left = new T[mid];
T *Right = new T[mid2];
for ( int i = 0; i < mid; i++ )
{
Left[i] = arr[i];
}
for ( int i = 0; i < mid2; i++ )
{
Right[i] = arr[mid+i];
}
mergeSort(Left, mid);
mergeSort(Right,mid);
merge(Left,mid,Right,mid2,arr);
delete Left;
delete Right;
}
这里是mergeSort函数中使用的合并函数:
template <class T>
void Metrics<T>::merge(T *a, int numA, T *b, int numB, T *c)
{
int i, j, k;
i = j = k = 0;
while ( i < numA && j < numB )
{
if (a[i] <= b[j])
{
c[k] = a[i];
i++;
k++;
}
else
{
c[k] = b[j];
j++;
k++;
}
}
while ( i < numA )
{
c[k] = a[i];
i++;
k++;
}
while ( j < numB )
{
c[k] = b[j];
j++;
k++;
}
}
我传入mergeSort函数的初始参数只是一个字符串数组,int n是36。哦对了,插入排序代码是这样的:
template <class T>
void Metrics<T>::insertionSort(T *arr, int n)
{
for ( int i = 1; i < n; i++ )
{
int j = i;
while ( j > 0 && arr[j] < arr[j-1] )
{
T temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
j--;
}
}
}
我很确定这与我将字符串数组发送到函数中这一事实有关。它只适用于整数和字符。谢谢!
编辑:: 稍微研究一下之后,我认为它在mergeSort 底部的“删除左侧”和“删除右侧”代码上崩溃了。这有什么原因吗?我该如何解决?这就是它崩溃的原因吗?
【问题讨论】: