Sortowanie grzebieniowe
Z Wikipedii
Sortowanie grzebieniowe (ang. combsort) – opublikowana w 1991 roku przez Stephena Lacey'a i Richarda Boxa metoda sortowania tablicowego. Jej główne cechy to:
- oparta na metodzie bubblesort (sortowanie bÄ…belkowe)
- prawdopodobnie złożoność wynosi O(n log n), statystycznie gorsza niż quicksort (sortowanie szybkie)
- włączono empirię - współczynnik 1.3 wyznaczony doświadczalnie
wariant podstawowy:
- za rozpiętość przyjmij długość tablicy, podziel rozpiętość przez 1.3, odrzuć część ułamkową
- badaj kolejno wszystkie pary obiektów odległych o rozpiętość (jeśli są ułożone niemonotonicznie - zamień miejscami)
- wykonuj powyższe w pętli dzieląc rozpiętość przez 1.3 do czasu, gdy rozpiętość osiągnie wartość 1.
Gdy rozpiętość spadnie do 1 metoda zachowuje się tak jak sortowanie bąbelkowe. Tylko wtedy możemy określić, czy dane są już posortowane czy nie. W tym celu możemy użyć zmiennej typu bool, która jest ustawiana po zamianie elementów tablicy miejscami. Przerywamy wykonywanie algorytmu, gdy podczas przejścia przez całą tablicę nie nastąpiła zamiana.
Wariant Combsort 11: rozpiętość 9 i 10 zastępujemy 11
[edytuj] Przykład w języku C / C++
- tab - tablica elementów (w przykładzie tablica liczb całkowitych)
- gap - rozpiętość; w kolejnych iteracjach pętli dzielimy przez współczynnik 1.3
- tmp - zmienna całkowitoliczbowa; do zamiany elementów
- swapped - zmienna logiczna; czy dokonano zamiany elementów
void combSort(int* tab, int size) { int gap = size, tmp; bool swapped = true; while (gap > 1 || swapped){ // jeśli gap = 1 lub nie dokonano zamiany - wyjście z pętli gap = gap * 10 / 13; if(gap==0) gap=1; swapped = false; for ( int i = 0; i + gap < size; ++i ) { // wykonuj od 0 do ostatniego elementu tablicy if ( tab[i + gap] < tab[i] ) { // porównanie elementów odległych o rozpiętość tmp = tab[i]; // zamiana elementów tab[i] = tab[i + gap]; tab[i + gap] = tmp; swapped = true; } } } }
Funkcja do wyznaczania współczynnika rozpiętości (Wariant Combsort 11)
int newGap(int gap) { gap = gap * 10 / 13; if ( gap == 9 || gap == 10 ) gap = 11; if(gap==0) gap=1; return gap; }
| Stan wojenny w USA, wyborów nie będzie? |
4 listopada wyborów w USA nie będzie. Administracja prezydenta George'a W. Busha, pod pretekstem kryzysu finansowego, wprowadzi stan wojenny i przesunie głosowanie na później. Spokojnie - to tylko plotka, ale żywiołowa dyskusja na ten temat przetacza się przez blogi i internetowe fora - informuje portal "Rzeczpospolitej".
|
| Rośnie bilans ofiar trzęsienia ziemi |
Do dwunastu wzrosła liczba ofiar trzęsienia ziemi, do którego doszło w sobotę na Północnym Kaukazie - poinformowało rosyjskie Ministerstwo ds. Sytuacji Nadzwyczajnych. Epicentrum znajdowało się koło małej czeczeńskiej wsi Wiedieno.
|
| Bush: kryzys wymaga globalnej reakcji |
- Wszyscy zdajemy sobie sprawę, że jest to poważny kryzys globalny i właśnie dlatego wymaga on globalnej reakcji - powiedział George W. Bush po sobotnim spotkaniu z ministrami finansów i szefami banków centralnych państw G7.
|
| Korea (oficjalnie) nie wspiera już terrorystów |
Amerykański Departament Stanu ogłosił że skreśli Koreę Północną z listy państw finansujących terroryzm, o czym wcześniej wspominały anonimowe źródła dyplomatyczne. Stało się to po tym, gdy Phenianu wyraził zgodę na inspekcję instalacji nuklearnych.
|
| Mafioso zagrał samego siebie |
Włoska policja aresztowała siedmiu członków gangu kamorry - Casalesi. Wśród nich był 53-letni Bernardino Terracciano, który wcześniej zagrał w głośnym filmie "Gomorra". Jak się okazało nie tylko na wielkim ekranie należał do mafii.
|
4 listopada wyborów w USA nie będzie. Administracja prezydenta George'a W. Busha, pod pretekstem kryzysu finansowego, wprowadzi stan wojenny i przesunie głosowanie na później. Spokojnie - to tylko plotka, ale żywiołowa dyskusja na ten temat przetacza się przez blogi i internetowe fora - informuje portal "Rzeczpospolitej".
Do dwunastu wzrosła liczba ofiar trzęsienia ziemi, do którego doszło w sobotę na Północnym Kaukazie - poinformowało rosyjskie Ministerstwo ds. Sytuacji Nadzwyczajnych. Epicentrum znajdowało się koło małej czeczeńskiej wsi Wiedieno.
- Wszyscy zdajemy sobie sprawę, że jest to poważny kryzys globalny i właśnie dlatego wymaga on globalnej reakcji - powiedział George W. Bush po sobotnim spotkaniu z ministrami finansów i szefami banków centralnych państw G7.
Amerykański Departament Stanu ogłosił że skreśli Koreę Północną z listy państw finansujących terroryzm, o czym wcześniej wspominały anonimowe źródła dyplomatyczne. Stało się to po tym, gdy Phenianu wyraził zgodę na inspekcję instalacji nuklearnych.
Włoska policja aresztowała siedmiu członków gangu kamorry - Casalesi. Wśród nich był 53-letni Bernardino Terracciano, który wcześniej zagrał w głośnym filmie "Gomorra". Jak się okazało nie tylko na wielkim ekranie należał do mafii.