Я пытаюсь реализовать алгоритм merge-sort
с использованием arrays
вместо vectors
, и я получаю некоторые ошибки в одной из двух моих функций.Код этих двух функций приведен ниже.
void Merge(int ar[], int ar1[], int ar2[], int n1, int n2) {
int p1 = 0;
int p2 = 0;
int p3 = 0;
while (p1 < n1 && p2 < n2) {
if (ar1[p1] < ar2[p2])
{
ar[p3]=ar1[p1];
p3++;
p1++;
}
else
{
ar[p3]=ar2[p2];
p3++;
p2++;
}
}
while (p1 < n1)
{
ar[p3]=ar1[p1];
p3++;
p1++;
}
while (p2 < n2)
{
ar[p3]=ar2[p2];
p3++;
p2++;
}
}
Я понял, как решить проблему, с которой столкнулся, с помощью приведенного ниже кода.
void Sortmerge(int array[],int n) {
if (n <= 1) return;
if (n % 2 == 0)
{
int arr1[n/2];
int arr2[n/2];
int k=0;
int l=0;
for (int i=0;i<n;i++)
{
if (i<(n/2))
{
arr1[k++]=array[i];
}
else
{
arr2[l++]=array[i];
}
}
Sortmerge(arr1,n/2);
Sortmerge(arr2,n/2);
for (int i=0;i<n;i++)
{
array[i]=0;
}
Merge(array, arr1, arr2,n/2,n/2);
}
if (n%2!=0)
{
int arr1[(n-1)/2];
int arr2[(n+1)/2];
int k=0;
int l=0;
for (int i=0;i<n;i++)
{
if (i<((n-1)/2))
{
arr1[k++]=array[i];
}
else
{
arr2[l++]=array[i];
}
}
Sortmerge(arr1,(n-1)/2);
Sortmerge(arr2,(n+1)/2);
for (int i=0;i<n;i++)
{
array[i]=0;
}
Merge(array, arr1, arr2,(n-1)/2,(n+1)/2 );
}
}