• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Algorytm Merge-Sort

Object Storage Arubacloud
+1 głos
769 wizyt
pytanie zadane 18 maja 2015 w C i C++ przez Buckethead Nowicjusz (130 p.)

Witam. Mam małe pytanie dotyczące algorytmu sortującego i scalającego. Wszystko się kompiluje jednak w wyniku wywala mi jakieś śmiecie. Dodam, że algorytm ma być zrobiony bez wykorzystania wskaźników. Będe mega wdzięczny za pomoc, mam wrażenie, że gdzieś zrobiłem mały błąd którego ni kija nie moge zlokalizować, kompilując wywala jakieś dziwne dane.

Pozdrawiam i bardzo dziękuje za pomoc ;)

 

#include <iostream>

using namespace std;

void merge_sort(int tablica[], int poczatek, int koniec);
void Scalaj (int tab[], int poczatek, int srodek, int koniec);

int main()
{
    int tab[] = {1,3,15,7,23,20,9,7,13,8};
    int p = 0;
    int k = 9;

    merge_sort(tab,p,k);

     for(int i=0;i<10;i++)
            cout<<tab[i]<<" ";

    return 0;
}

void merge_sort(int tablica[], int poczatek, int koniec)
{
int srodek;
if (poczatek < koniec){
    srodek = (poczatek + koniec) / 2;
    merge_sort(tablica, poczatek, srodek);
    merge_sort(tablica, srodek + 1, koniec);
    Scalaj(tablica, poczatek, srodek, koniec); }
}

void Scalaj (int tab[], int poczatek, int srodek, int koniec)
{
    int i = poczatek;
    int j = srodek + 1;
    int temp[10]; //tablica pomocnicza
    int q = poczatek; // indeks aktualnej pozycji w tablicy pomocniczej

    while (i <= srodek && j <= koniec)
    {
        if (tab[i] <= tab[j])
        {
            temp[q] = tab[i];
            i++;
            q++;
        }
        else //tab[j] < tab[i]
        {
            temp[q] = tab[j];
            q++;
            j++;
        }
    }

    //jesli ktorys z ciagow jest juz pusty
    while (i <= srodek )
    {
        temp[q] = tab[i];
        q++;
        i++;
    }
    while (j <= koniec )
    {
        temp[q] = tab[j];
        q++;
        j++;
    }

    // skopiowanie elementow z tablicy pomocniczej do wlasciwej tablicy
    for (int s = 0; s <10; s++)
        tab[s] = temp[s];


}

 

 

1 odpowiedź

+2 głosów
odpowiedź 18 maja 2015 przez adrian17 Ekspert (345,160 p.)
	// skopiowanie elementow z tablicy pomocniczej do wlasciwej tablicy
	for (int s = 0; s <10; s++)
		tab[s] = temp[s];

Funkcja Scalaj działa na różnych częściach tablicy, ale pod koniec przenosisz całą zawartość tablicy pomocniczej do właściwej - zastanów sie, jaki kawałek powinieneś kopiować zamiast całości.

Podobne pytania

+1 głos
6 odpowiedzi 535 wizyt
pytanie zadane 17 maja 2015 w C i C++ przez krecik1334 Maniak (58,390 p.)
0 głosów
0 odpowiedzi 312 wizyt
pytanie zadane 18 października 2020 w C i C++ przez milosz123 Użytkownik (720 p.)
0 głosów
1 odpowiedź 458 wizyt

92,620 zapytań

141,474 odpowiedzi

319,813 komentarzy

62,004 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...