Kurs C++ - zadania, opracowania, olimpiady, algorytmy
  Sortowanie przez wstawianie
 
Sortowanie przez wstawianie jest kolejnym prostym algorytmem działającym w złożności O(n[kwadrat]).

Weźmy przykładową tablicę o elementach [3,9,5,2,4].

Zaczynamy od drugiego elementu tablicy i sprawdzamy czy jest on mniejszy od elemetu po lewej stronie. Jeśli tak to zamieniamy je miejscami i sprawdzamy następny, aż napotkany element będzie miał wartość mniejszą od obecnie wstawianego.

Po pierwszym kroku cyfra 9 pozostanie na swoim miejscu ponieważ zachodzi warunek 3<9.

Teraz bierzemy 5 i sprawdzamy czy jest mniejsza od poprzedniego elementu, czyli 9. Ponieważ jest to zamieniamy miejscami te elementy. Następnie sprawdzamy czy znowu 5 jest mniejsza od poprzednika - nie jest a więc zostaje na tej pozycji (tablica wygląda tak [3,5,9,2,4]).

Następnie bierzemy kolejny element i dopóki poprzednie elementy są większe od 2-ki to zamieniamy je miejscami. Tablica zmieni się następująco:

[3,5,9,2,4] -> [3,5,2,9,4] -> [3,2,5,9,4] -> [2,3,5,9,4]

Ostatni element podobnie zamieniamy miejscami z poprzednikami, aż ich wartość będzie niewiększa od wstawianego elementu.


Sortowanie to jest podobne do bąbelkowego prwada??


Teraz czas na implementację w C++:

void wstawianie(int *tab, int size) // To samo co w poprzednim algorytmie, czyli: *tab wskaźnik, który przchowuje cyfry i size czyli rozmiar.
{
 for(int i=1; i<size ;++i)        //jedziemy od drugiego elementu do ostatniego
  {
   int tmp = tab[i];             //zmienna pomocnicza, która zapamiętuje tab[i]
   int j=i-1;                        //indeks poprzednika
   while((j>=0) && (tablica[j]>tmp)) //dopóki istnieje poprzednik
    {                                //i jego wartość jest większa
     tablica[j+1] = tablica[j];      //przesuń poprzedni element w prawo
     --j;
    }
   tablica[j+1] = tmp;               //wstaw  element w odpowiednim miejscu
  }
}

 
 
   
 
Ta strona internetowa została utworzona bezpłatnie pod adresem Stronygratis.pl. Czy chcesz też mieć własną stronę internetową?
Darmowa rejestracja