c++归并排序函数崩溃

C++ Crashing in mergesort Function

本文关键字:崩溃 函数 归并排序 c++      更新时间:2023-10-16

由于某种原因,我的程序在这个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--;
    }
}
}

我很确定这与我将字符串数组发送到函数中有关。但它只适用于整数和字符。谢谢!

编辑::看了一下,我认为它崩溃的"删除左"answers"删除右"的代码在合并排序底部。这有什么原因吗?我该怎么修理它?这就是它崩溃的原因吗?

您应该使用delete [] Leftdelete [] Right来匹配new []调用。

你也调用mergeSort(Right,mid);应该是mergeSort(Right,mid2);,但我不认为这会导致崩溃,只是一个非排序的项目,当n是奇数。