Anonymní profil Hanule – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Hanule – Programujte.comAnonymní profil Hanule – Programujte.com

 

Příspěvky odeslané z IP adresy 2001:718:801:233:7cb8:253...–

Hanule
C / C++ › Řadící algoritmy - Mergesort
15. 4. 2013   #175039

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);
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý