Řadící algoritmy - Mergesort – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Řadící algoritmy - Mergesort – C / C++ – Fórum – Programujte.comŘadící algoritmy - Mergesort – C / C++ – Fórum – Programujte.com

 

Hanule
~ Anonymní uživatel
37 příspěvků
15. 4. 2013   #1
-
0
-

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

Nahlásit jako SPAM
IP: 2001:718:801:233:7cb8:253...–
KIIV
~ Moderátor
+43
God of flame
15. 4. 2013   #2
-
0
-

neexistuje "nevim kde je chyba" ... pripises hromady debug hlasek, vypisovani pozic a tak ... a kde sou blby hodnoty tam je chyba

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
15. 4. 2013   #3
-
0
-

jen sem tak orientacne pridal vypis do prvniho foru v merge(),,,

k=0 l=0 i=0 j=1
k=0 l=0 i=0 j=2
k=1 l=0 i=1 j=3
k=3 l=3 i=3 j=4
k=0 l=0 i=0 j=3
k=1 l=0 i=1 j=4
k=2 l=0 i=2 j=5
k=3 l=0 i=2 j=6
k=5 l=5 i=5 j=6
k=7 l=7 i=7 j=8
k=5 l=5 i=5 j=7
k=6 l=5 i=6 j=8
k=7 l=5 i=7 j=9
k=0 l=0 i=0 j=5
k=1 l=0 i=1 j=6
k=2 l=0 i=2 j=7
k=3 l=0 i=3 j=8
k=4 l=0 i=4 j=9
k=5 l=0 i=5 j=10
k=6 l=0 i=5 j=11
k=7 l=0 i=5 j=12

j de uplne mimo pole

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 128 hostů

Podobná vlákna

Triedenie MergeSort — založil newo

Nefungční MergeSort — založil Martin

Algoritmy.... — založil jurec

Moderátoři diskuze

 

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