我已经在c ++中实现了合并排序。它没有错误,但不知何故它不起作用

时间:2018-01-19 12:19:54

标签: c++ visual-studio-code mergesort

下面给出的

是c ++中的合并排序实现。我使用过visual studio代码。它需要输入,但只是停止而不显示任何错误。我认为它可能在某处出现了分段错误,但我无法弄明白。

#include<iostream>

using namespace std;

void merge(int arr[], int beg, int mid, int end) //function to merge the arrays
{
int i = beg;
int j = mid +1;
int k, index = 0;
int temp[100];
while(i <= mid && j <= end)
{
    if(arr[i] < arr[j])
    {
        temp[index] = arr[i];
        i++;
    }
    else
    {
        temp[index] = arr[j];
        j++;

    }
    index++;
}
while(i <= mid)
{
    temp[index] = arr[i];
    i++;
    index++;
}

while(j <= end)
{
    temp[index] = arr[j];
    j++;
    index++;
}

for(int k = beg; k < index; k++)
    arr[k] = temp[k];
}

void mergeSort(int arr[], int beg, int end)  //dividing the array
{
int mid = (beg + end)/2;
mergeSort(arr, beg, mid);
mergeSort(arr, mid+1, end);

merge(arr, beg, mid, end);
}

int main(void)
{
int arr[100];
cout<<"enter the array"<<endl;

 int size = sizeof(arr);

for(int i = 0; i < size; i++)
    cin>>arr[i];


mergeSort(arr, 0, size-1);

for(int i = 0; i < size; i++)
    cout<<arr[i];
}

1 个答案:

答案 0 :(得分:5)

您的递归mergeSort函数导致堆栈溢出,因为函数中没有终止条件。该函数在所有路径上都是递归的。这是无限递归的情况,其中函数不会返回并且不断地调用自身,导致堆栈溢出。更改函数类型,使用条件语句并在适当的时候返回。