Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pomoc w zrozumieniu rekurencji w quick_sort

Ostatnio zmodyfikowano 2015-11-17 16:24
Autor Wiadomość
carlosmay
» 2015-11-17 00:02:27
  • ustawienie wartości początkowych zmiennych zgodnie z przekazanymi wartościami
  • podział tablicy wg wartości pierwszego elementu oryginalnej tablicy
  • w pętli sprawdza i sortuje elementy z danej 'połówki', oraz aktualizuje zmienną licznikową (aby wiedział czy w nowym wywołaniu rekurencyjnym ma nadal sortować)
  • jeśli ma nadal sortować to znów tą pierwszą połówkę dzieli na dwie i tak w koło, aż nie będzie mieć co robić.
  • później wykonuje się rekurencyjne wywołanie drugiej części funkcji na tych samych zasadach.
  • po wykonaniu całości funkcja wraca po własnych śladach, i jak wykryje że elementy jeszcze nie wszystkie elementy nie są posortowane, znów wywołuje samą siebie
  • wszystko powtarza się, aż funkcja wróci po swoich śladach do punktu wyjścia. Wtedy sortowanie jest zakończone prawidłowo.

Normalnie chodzi to w Dev Cpp. Nie wiem o co się czepiacie :P
 a o to, że to są błędy u podstaw. To, że 'lipny' kompilator to uruchamia nie znaczy, że jest poprawne.
Chcesz zrozumieć co się dzieje w kolejnych 'ramkach' stosu przy kolejnych wywołaniach funkcji,
a ignorujesz podstawy programowania.
P-140261
maciek1o3s
Temat założony przez niniejszego użytkownika
» 2015-11-17 08:28:04
Hej dzieki ze mi odpowiedziales ale nadal nie rozumiem tego o co sie pytalem.

Na początku funkcja void quick_sort dzieli nam tablice t na t1 i t2. Potem wywołujemy funkcje quick_sort(t1, n1) dla tablicy t1. I teraz nie rozumiem tego, funkcja dzieli nam tablice t1 na tablice t1 i t2? To zrobi sie maslo maslane, tablica t1 zostanie nadpisana czy co? Mam rozumieć ze komputer wykryje ze nowa tablica t1 jest utworzona z poprzedniej t1 i jakos inaczej ja sobie oznaczy i nie nadpisze jej?
P-140266
carlosmay
» 2015-11-17 11:00:18
Mam rozumieć ze komputer wykryje
 komputer nie zrobi nic czego mu nie każesz. Do tego służą polecenia i instrukcje przetłumaczone na język maszynowy.
To zrobi sie maslo maslane, tablica t1 zostanie nadpisana czy co?
 i tutaj kłaniają się podstawy, przed którymi tak usilnie się bronisz!
Jak przekazujesz tablicę do funkcji to funkcja odbiera adres przekazanego elementy (czyli tutaj t1 ==> t1[0]).
Wniosek: funkcja zawsze działa na oryginalnej tablicy (każde działanie, zamiana wartości dzieje się w oryginale).

Materiały:
Funkcje pierwsze starcie
Tablice jednowymiarowe
Przekazywanie tablic jednowymiarowych do funkcji
Funkcje kolejne aspekty

Proponuje opanować te materiały i dopiero próbować zrozumieć co tam się dzieje.

Google też wyszuka gro info na ten temat.
P-140273
maciek1o3s
Temat założony przez niniejszego użytkownika
» 2015-11-17 16:13:29
Nie rozumiem co napisales. Jestem na pierwszym roku a wymagaja od nas rozumienia algorytmow, bez tlumaczenia podstaw wiec mi sie nie dzie.

Ja prosze o proste wytlumaczenie tego ze jesli tablica t zostala podzielona na t1 i t2 to jak potem tablice t1 mozemy znow podzielic na t1 i t2? Czy nie zrobi sie maslo maslane i t1 nie nadpisze sie nowa tablica?
P-140304
carlosmay
» 2015-11-17 16:24:40
Nie rozumiem co napisales.
 brak podstaw!!!!!!!!
Ja prosze o proste wytlumaczenie tego ze jesli tablica t zostala podzielona na t1 i t2 to jak potem tablice t1 mozemy znow podzielic na t1 i t2? Czy nie zrobi sie maslo maslane i t1 nie nadpisze sie nowa tablica?
 na tym to polega, żeby zamieniały się miejscami elementy w oryginalnej tablicy.
Nie ma znaczenia, czy funkcja jest wywoływana m 'main()', czy wewnątrz siebie. Funkcja zawsze uruchamia się w ten sam sposób (argumenty są te same, tylko mają inne wartości).

Póki nie nauczysz się tego z linków, nie zrozumiesz jak to działa!!!


edit:
PS: Czy ten kod z pierwszego posta sam modziłeś, czy taki był podany?

edit2: Czy wiesz jak wygląda tablica w pamięci komputera?
P-140306
1 « 2 »
Poprzednia strona Strona 2 z 2