是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];
}
答案 0 :(得分:5)
您的递归mergeSort
函数导致堆栈溢出,因为函数中没有终止条件。该函数在所有路径上都是递归的。这是无限递归的情况,其中函数不会返回并且不断地调用自身,导致堆栈溢出。更改函数类型,使用条件语句并在适当的时候返回。