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

Sortowanie bąbelkowe wersja rekurencyjna.

Aruba Cloud - Virtual Private Server VPS
0 głosów
291 wizyt
pytanie zadane 8 stycznia 2023 w C i C++ przez Zuzan Początkujący (390 p.)

Witam. Mam do napisania funkcje, która posortuje ciąg liczb rosnąco przy użyciu sortowania bąbelkowego. Warunkiem zadania jest rozwiązanie go w sposób rekurencyjny, oraz nie wolno używać pętli. Napisałam tą funkcje jednak nie działa ona prawidłowo i nie mam pomysłu w jaki sposób mogę ten problem rozwiązać. Jestem początkująca w programowaniu, będę wdzięczna za każdą pomoc. 

int bubble_sort_asc_rec(int tab[], int size) {
    if(tab==NULL){
        return 1;
    }
    if (size <=0) {
        return 1;
    }
    if(size==1){
        return 0;
        }


    if (tab[0] > tab[1]) {
        int temp = tab[0];
        tab[0] = tab[1];
        tab[1] = temp;
        for(int k=0; k<size; k++){
            printf("%d ", tab[k]);
        }
        printf("\n");
        return bubble_sort_asc_rec(tab, size);
    }

    else {
        return bubble_sort_asc_rec(tab, size-1);
    }

}

Przykładowe wyjście: 

-69 -55 -93 -54 18 -63 34 -21 7 -41 -91 -51 62
-69 -93 -55 -54 -63 18 -21 7 -41 -91 -51 34
-93 -69 -55 -63 -54 -21 7 -41 -91 -51 18
-93 -69 -63 -55 -54 -21 -41 -91 -51 7
-93 -69 -63 -55 -54 -41 -91 -51 -21
-93 -69 -63 -55 -54 -91 -51 -41
-93 -69 -63 -55 -91 -54 -51
-93 -69 -63 -91 -55 -54
-93 -69 -91 -63 -55
-93 -91 -69 -63
-93 -91 -69 -63 -55 -54 -51 -41 -21 7 18 34 62
komentarz 8 stycznia 2023 przez Oscar Nałogowiec (29,340 p.)
Coś mi nie pasują wyniki i kod. Funkcja jedynie co robi to zamienia dwa pierwsze elementy tablicy, a zawsze początek tablicy jest przekazywany taki sam.

Chyba w else powinna być przekazana tablica bez pierwszego elementu, a nie ostatniego.

1 odpowiedź

0 głosów
odpowiedź 8 stycznia 2023 przez Wiciorny Ekspert (280,450 p.)

Robisz to samo non stop, na takim samie rozmiarze tablicy więco to jest źle 
 

  return bubble_sort_asc_rec(tab, size); // rozmiar nie uległ zmianie.

sprawdź 

 return bubble_sort_rec(tab+ 1, size - 1);

dlaczego tylko dla przypadku "else" zmienias zrozmiar, to nie ma sensu skoro sortujesz bąbelkowo i 
 


    else { // to jest niepotrzebne i zawsze powinnas zmieniac rozmiar tablicy 
        return bubble_sort_asc_rec(tab, size-1);
    }

 

komentarz 8 stycznia 2023 przez Zuzan Początkujący (390 p.)

Zamieniłam ten fragment:

return bubble_sort_asc_rec(tab, size);

W ten sposób: 

return bubble_sort_asc_rec(tab+1, size-1);

Oraz ten: 

return bubble_sort_asc_rec(tab, size-1);

Na taki: 

return bubble_sort_asc_rec(tab+1, size);

I wyjście jest takie: 

Podaj wektor:-3 1 -2 5 4 0
 Podaj kierunek sortowania:1
 -2 1 5 4 0
4 5 0 6
0 5 6
0 6
-3 -2 1 4 0

Więc nie do końca ta funkcja działa prawidłowo. Natomiast jak zamieniłam tylko fragment wskazany przez pana to program wyświetlał tylko ciąg który podał użytkownik.

komentarz 8 stycznia 2023 przez Wiciorny Ekspert (280,450 p.)

ale tu nie masz "warunku lub" ... 
 

  if (tab[0] > tab[1]) {
        int temp = tab[0];
        tab[0] = tab[1];
        tab[1] = temp;
        for(int k=0; k<size; k++){
            printf("%d ", tab[k]);
        }
        printf("\n");
        return bubble_sort_asc_rec(tab+1, size-1);
}
 

 

komentarz 8 stycznia 2023 przez Zuzan Początkujący (390 p.)
Nie bardzo wiem, w którym miejscu powinnam wstawić ten warunek.

Podobne pytania

+1 głos
1 odpowiedź 159 wizyt
pytanie zadane 28 listopada 2024 w C i C++ przez adam234345 Początkujący (400 p.)
0 głosów
1 odpowiedź 775 wizyt
pytanie zadane 24 października 2021 w C i C++ przez pita Nowicjusz (180 p.)
0 głosów
1 odpowiedź 992 wizyt
pytanie zadane 2 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)

93,335 zapytań

142,328 odpowiedzi

322,406 komentarzy

62,670 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...