niedziela, 23 listopada 2008

Sortowanie przez wybieranie - Delphi

Nie będziemy się już rozpisywali od podstaw. Podamy sam algorytm w Delphi. Deklarować zmienne pewnie już każdy umie. Oto kod:

for j := 1 to n - 1 do
    begin
        Min := j;

        for i := j + 1 to n do
            if Tab[i] < Tab[Min] then
                Min := i;

        Temp := Tab[Min];
        Tab[Min] := Tab[j];
        Tab[j] := Temp;
    end;


Gdyby coś było niezrozumiałe to proszę pisać.

niedziela, 16 listopada 2008

Sortowanie przez wybieranie - C++

W poniższych przypadkach sortujemy w kolejności rosnącej. Tak jak poprzednio przekazujemy do funkcji 2 informacje:
*tab - wskaźnik na tablicę którą chcemy posortować
n - liczba elementów tablicy
void sort(int *tab, int n)
{
for(int i=0; i < n; i++) //Przeglądamy tablicę n razy
{
int min=i; //Element który będzie "pamiętał" numer
// najmniejszego elementu w tablicy

for(int j=i; j < n; j++) //Pętla porównująca
{
if(tab[min]>tab[j]) //Sprawdza czy el. o nr min jest
// mniejszy od el. o nr j

{
min = j; // Zapisuje numer najmniejszego el.
}
}
swap(tab[i], tab[min]); //Zamienia el. obecnie sprawdzany
// z el. o nr min.

}
}

poniedziałek, 10 listopada 2008

Sortowanie przez wybieranie

Sortowanie przez wybieranie jest kolejną prostą metodą sortowania danych. Algorytm wyszukuje element, który ma znaleźć się na żądanej pozycji, następnie zamienia miejscami go z tym, który jest tam obecnie.
Przy sortowaniu elementów rosnąco wyglądałoby to tak:

1. Wyszukaj element o minimalnej wartości.
2. Zamień znaleziony element z tym na pozycji początkowej.

Przykład zasięgnięty z Wikipedii:

Posortowana zostanie tablica 8-elementowa [9,1,6,8,4,3,2,0]. W tablicy pogrubione zostaną te elementy wśród których wyszukuje się wartość minimalną.


Algorytm można nieco przyspieszyć, gdy tablica jest wypełniana z obu końców, tj. wyszukiwane jest równocześnie minimum i maksimum.

poniedziałek, 3 listopada 2008

Sortowanie bąbelkowe - C++

Podane poniżej sortowanie przyjmuje 2 wartości.
*tab jest to wskaźnik na tablicę
n to ilość elementów w tablicy
void sortuj (int *tab, int n)
{
for (int j=0; j < n-1; j++)
{
for (int i=0; i < n-j-1; i++)
{
if (tab[i] > tab[i+1])
{
swap(tab[i], tab[i+1]);
}
}
}
}

Pierwsza pętla for jest odpowiedzialna za przejście przez tablicę n razy. (Tablica ma elementy ponumerowane od 0 do n-1). Druga pętla pilnuje by zostało wykonanych w każdym przejściu tablicy dokładnie n-j-1 porównań. (j to licznik przejść przez tablice) If sprawdza czy musimy zamieniać 2 sąsiadujące elementy czy może są już w dobrej kolejności. Swap to funkcja napisana w poprzednich notach zamieniająca 2 elementy.
Przykładowe użycie funkcji sortującej dla tablicy o nazwie array i liczbie elementów wynoszącej 10 wygląda następująco:
sortuj(array, 10);