Ich bekomme Segmentierung Fehler beim Implementieren von Mergesort. Ich habe für Array außerhalb der Grenzen überprüft. Ich würde einige Hilfe lieben, um herauszufinden, wo ich falsch gegangen bin. Ich habe Eingaben für kleine Arrays wie Größe 10 versucht, wo ich die Größe der Temperatur als statisch genommen habe (> 10). Ich habe mir stundenlang die Haare ausgezogen.Mergesort in C++: Segmentierung Fehler
UPDATE: Ich musste nur ändern mid = (low + high)/2.
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
void merges(int arr[],int low,int mid,int high)
{
int i=low,j=mid+1,k=0;
int temp[high-low+1];
while(i<=mid && j<=high)
{
if(arr[i]<arr[j])
{
temp[k++]=arr[i];
i++;
}
else
{
temp[k++]=arr[j];
j++;
}
}
if(i>mid)
{
while(j<=high)
{
temp[k++]=arr[j];
j++;
}
}
else
{
while(i<=mid)
{
temp[k++]=arr[i];
i++;
}
}
j=0;
for(i=low;i<=high;i++)
{
arr[i]=temp[j++];
}
}
void mergesort(int arr[],int low,int high)
{
if(low<high)
{
int mid=low+high/2;
mergesort(arr,low,mid);
mergesort(arr,mid+1,high);
merges(arr,low,mid,high);
}
}
int main(){
int n;
cin >> n;
int arr[n];
for(int arr_i = 0;arr_i < n;arr_i++){
cin >> arr[arr_i];
}
int i,j,k;
mergesort(arr,0,n-1);
for(i=0;i<n;i++)
cout<<arr[i];
return 0;
}
Shen Sie erhalten Segmentierung Fehler unter Debugger sollte es zeigen, wo es passiert. Haben Sie es nicht unter dem Debugger ausgeführt oder verstecken Sie diese Informationen vor uns? – Slava
Versuchen Sie, die Mitte zu ändern (niedrig + hoch)/2 statt niedrig + hoch/2 –
Vorschlag - machen Sie 'mid' und' high' auf das Element hinter dem letzten Punkt, wie es C++ -Algorithmen tun. Vor allem das macht Ihren Code sauberer, zweitens können Sie einfach Standard-Algos verwenden (zum Beispiel 'std :: copy' anstelle von loop). Es gibt einen Grund, warum es so in C++ gemacht wird. – Slava