ALG6
86 Rozdział 4. Algorytmy sortowania
zamiany sąsiadujących ze sobą elementów, a druga będzie wymagać ich
aż sześciu:
wersja 1: 4 2 6 18 20 39 40
wersja 2: 4 6 18 20 39 40 2.
Istnieje kilka możliwości poprawy jakości tego algorytmu - nie prowadzą one co prawda do zmiany jego klasy (w dalszym ciągu mamy do czynienia z ()(N2)), ale mimo to dość znacznie go przyśpieszają. Ulepszenia te polegają odpowiednio na:
• zapamiętywaniu indeksu ostatniej zamiany (walka z „pustymi przebiegami”);
• przełączaniu kierunków przeglądania tablicy (walka z niekorzystnymi konfiguracjami danych).
Tak poprawiony algoiytm sortowania bąbelkowego nazwiemy sobie po polsku sortowaniem przez wytrząsanie (ang. shaker-sort). Jego pełny tekst jest zamieszczony poniżej, lecz tym razem już bez tak dokładnej analizy, jak poprzednio:
sltaker.cpp
void ShakerSort(int *tab)
I
int right-n-1,k-n-l;
do ł
for(int j = right; j —)
if<tah[j-l]>tab[j])
(
zamiana(tab[j-l],tab[j]); k“j i }
left=k+l;
for(j=iett; jcright; j++) if(tab[j-1]>tab|j])
(
zamiana(tab (j -1],tab[j]); k=j;
I
tright-k-l;
Iwhile (left<right);
Wyszukiwarka
Podobne podstrony:
ALG8 88 Rozdział 4. Algorytmy sortowania Jest chyba dość oczywiste, że wywołania rekurencyjne zatrzALG 0 90 Rozdział 4. Algorytmy sortowania 90 Rozdział 4. Algorytmy sortowania Rys. 4 - 8. SortowanieALG6 116 Rozdział 5. Struktury danych Iisla2.li int alfabetycznie(ELEMENT *q],ELEMENT *q2) { II czyALG6 56 Rozdział 3. Analiza sprawności algorytmów jest intuicyjnie bardzo proste, dalej będziemy użALG6 66 Rozdział 3. Analiza sprawności algorytmów return pos; else //element zostALG6 76 Rozdział 3. Analiza sprawności algorytmów Analogicznie dla 2 otrzymamy: Vn > 1, A(n,2) =ET6 86 Rozdział 6. Popyt turystyczny elastyczność popytu wobec cen usług standardowych jest wysokaALG6 26 RozdziaH. Zanim wystartujemy 1.5 metody niezmienników (zwanej niekiedy metodą Floyda). MająALG6 36 Rozdział 2. Rekurencja każemy. W rozdziale 9 zostanie omówiona ciekawa technika programowanALG6 46_ _ Rozdział2. Rekurencja rekurencyjnych jest pamięcioźerność: wielokrotne wywołania rekurenALG 6 96 Rozdział 5. Struktury danych Rys. 5 - 3. FCOOh FCI4h FFEEh Przykład listy jedno-kierunkALG6 106 Rozdziała. Strukturydanjt 5.1 będzie ich fuzją. Rekurencyjny zapis tego procesu jest bardzALG6 126 Rozdział 5. Struktury danych Rys. 5 - 12. Metoda„ tablic równoległych " (2) DANE L2ALG6 136 Rozdział 5. Struktury danycł forfint i=0; i<4;i+~) kolejka.wstaw(tab[i)); for(i=0;ALG6 146 Rozdział 5. Struktury danycti Jak widać, inteligentne użycie tablic może nam podsunąć możlALG6 156 Rozdział 5. Struktury danya Proces przechadzania się po drzewie nie jest bynajmniej zakońcALG6 166 Rozdział 6. Derekursywacji kosztuje cenny czas procesora, który dodaje się do ogólnego czaALG6 186 Rozdział 6. Derekursywacja D(x); while((N!=i)44(N%2>) ) l N-N/2; C (x)więcej podobnych podstron