Ahoj, potřebovala bych pomoct s Merge sortem, sice řadí, ale řadí jiná čísla než má.
Vstupní posloupnost je: 4, 7, 2, 1, 8, 15, 20, 3
Výstupní posloupnost: 4, 5, 8, 8, 2686696, 4200608, 4200608 0
Nevím ale kde je chyba.
#include <stdio.h>
#include <stdlib.h>
void mergeSort(int n, int a[]);
void msort(int l, int p, int a[]);
void merge(int l, int k, int p, int a[]);
int main()
{
int a[8]= {4,7,2,1,8,15,20,3};
for (int i=0; i<8; i++) printf("%d ", a[i]);
//rozdeleni haldy
mergeSort(8,a);
puts("");
for (int i=0;i<8;i++) printf("%d ",a[i]);
}
void msort(int l, int p, int a[])
{
int k; //stred
if(l<p) //0<8
{
k=(l+p)/2;
msort(l,k, a); //rekurzivne se rozdeli pole
msort(k+1,p, a);
merge(l,k,p,a); //preda parametry
}
}
void merge(int l, int k, int p, int a[])
{
int i, j;
int pom[8]; //rozdelene pole
i=l;
j=k+1;
for (k=l;k<p;k++)
{
if((i<=k) && (j<=p) || (a[i]<=a[j]))
{
pom[k]=a[i]; i++;
}
else pom[k]=a[j]; j++;
for (int k=l;k<p;k++)
{
a[k]=pom[k];
}
}
}
void mergeSort(int n, int a[])
{
msort(0,8, a);
}