Sortowanie grzebieniowe - Google

Sortowanie grzebieniowe

Z Wikipedii

Skocz do: nawigacji, szukaj

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.
Linki: Strona g³ówna