如何在Merge Sort中设置mid的值?

时间:2018-01-01 14:09:04

标签: c++ algorithm sorting

我已经实现了合并排序算法,但它为某些值抛出异常并显示某些值的正确值。 例如:如果我输入数组为:4 3 2 1则正确显示1 2 3 4 但是,对于输入:1 3 5 2 4 6它会引发异常。我认为这是因为我的中期任务。这是我对merge函数的实现:

void mergeArr(int a[], int l, int mid, int r)
{
    int n1, n2;
    int i,j,k;
    int inv_count = 0;
    n1 = mid - l + 1;
    n2 = r - mid;
    int temp[r-l+1];
    int L[n1], R[n2];
    for(i = 0;i < n1;i++)
        L[i] = a[l+i];
    for(j = 0;j < n2;j++)
        R[j] = a[mid+j+1];
    i = j = 0;
    k = l;
    while(i<n1 && j<n2)
    {
       if(L[i] <= R[j])
            temp[k++] = L[i++];
        else
        {
            temp[k++] = R[j++];
            inv_count += (mid - i);
        }
    }
    while(i<n1)
        temp[k++] = L[i++];
    while(j<n2)
        temp[k++] = R[j++];
    for(i=l;i<=r;i++)
        a[i] = temp[i];
}

merge_sort功能:

void mergeSort(int a[], int l, int r)
{
    int inv_count = 0;
    if(l < r)
    {
        int mid;
        mid = (l + (r))/2;
        mergeSort(a,l,mid);
        mergeSort(a,mid+1,r);
        mergeArr(a,l,mid, r);
    }
    //return inv_count;

1 个答案:

答案 0 :(得分:2)

我发现了问题,将inv_count += (mid - i)替换为inv_count += (n1 - i)做了有意义的工作