在Xcode中合并抛出索引超出范围的异常

时间:2015-02-13 06:26:44

标签: c++ xcode sorting mergesort

我正在尝试使用以下代码为偶数个元素实现简单的合并排序:

#include <iostream>
using namespace std;

void merge(int arr1[10],int len1,int arr2[10],int len2,int arr3[10],int len3)
{
    int i,j,k;
    while(i<len1&&j<len2&&k<len3)
    {
        if(arr1[i]<arr2[j])
        {
            arr3[k] = arr1[i];
            i++;k++;
        }
        else if(arr1[i]>arr2[j])
        {
            arr3[k] = arr2[j];
            k++;
            j++;
        }
    }
}

void mergeSort(int a[10],int n)
{
    int arr1[10],arr2[10];
    for(int i=0;i<n/2;i++)
    {
        arr1[i] = a[i];
    }
    for(int i=(n/2+1);i<n;i++)
    {
        arr2[i] = a[i];
    }
    mergeSort(arr1,n/2);
    mergeSort(arr2,n/2);
    merge(arr1,n/2,arr2,n/2,a,n);
}



int main() {
    int arr[10],n;
    cout << "Enter number of elements\n";
    cin >> n;
    cout<<"Enter elements\n";
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    mergeSort(arr, n);
    cout<<"Sorted array is"<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<endl;
    }
    return 0;
}

但我在EXC_BAD_ACESS方法的左大括号上遇到mergeSort()错误。我是Xcode的新手,并不确定如何解决这个问题。我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

您忘记在合并(...)的函数定义中将int变量i,j,k初始化为0(零)。

void merge(int arr1[10],int len1,int arr2[10],int len2,int arr3[10],int len3)
{
    // int i,j,k;    // Not initialized.
    int i = j = k = 0;
    while(i<len1&&j<len2&&k<len3)
    {
       ...
       ...
}

编辑后:

void mergeSort(int a[10],int n)
{
    int arr1[10],arr2[10];
    for(int i=0;i<n/2;i++)
    {
        arr1[i] = a[i];
    }
    // Here you are skipping the middle index.
    // Let's say array is of length 10, then arr1 contains elements on index from 0 to 4 (5 elements),
    // whereas arr2 contains elements on index from 6 to 9 (4 elements).
    // 5th index element is missing.

    // for(int i=(n/2+1);i<n;i++)
    for(int i=(n/2);i<n;i++)
    {
        arr2[i] = a[i];
    }
    mergeSort(arr1,n/2);
    mergeSort(arr2,n/2);
    merge(arr1,n/2,arr2,n/2,a,n);
}

希望它有所帮助!