[C++] Sortowanie algorytmem gnoma

krystian1863
Użytkownik
Użytkownik
Posty: 121
Rejestracja: 3 maja 2010, o 17:23
Płeć: Mężczyzna
Lokalizacja: Ostrołęka
Podziękował: 14 razy
Pomógł: 2 razy

[C++] Sortowanie algorytmem gnoma

Post autor: krystian1863 »

Kod: Zaznacz cały

#include <stdio.h>

const int ROZMIAR=5;
int nieposortowane[]={4, 3, 2, 1, 0};

// funkcja porownujace dwa elementy typu integer
int porownaj(int a, int b)
{
    return a>b;
}

// sortowanie babelkowe (ang. bubble sort)
void babelki(int* tablica, int N)
{
    int zamienione, i, tmp;

    do
    {
        zamienione=0; // jezeli nie bedzie zadnej zamiany, to tablica jest juz uporzadkowana

        for(i=0;i<N-1;i++)
            if(porownaj(tablica[i], tablica[i+1]))
            {

                // zamiana dwoch sasiednich elementow
                tmp=tablica[i];
                tablica[i]=tablica[i+1];
                tablica[i+1]=tmp;

                // tablica jeszcze nie jest uporzadkowana
                zamienione=1;
            }
    }
    while(zamienione);
}


// sortowanie przez wstawianie (ang. insertion sort)
void wstawianie(int* tablica, int N)
{
    int i, j, tmp;
    for(i=1; i<N; i++)
    {
        // elementy o indeksach 0 do i-1 sa juz uporzadkowane

        tmp=tablica[i]; // wartosc i-tego elementu

        // przesuwanie elementow tablica[j]<=tmp
        j=i-1;
        while(j>=0 && porownaj(tablica[j],tmp))
        {
            tablica[j+1]=tablica[j];
            j--;
		}
        // wstawienie elementu (potrzebne jest dodanie 1 bo j bylo dekrementowane w linii 48)
        tablica[j+1]=tmp;
    }
}

// funkcja wypisujac N elementow z tablicy int
void wypisz(int* tablica, int N)
{
    int i=0;
    for(i=0;i<N;i++)
        printf("%d
", *(tablica+i));
}

// funkcja kopiujace N elementw typu int
void kopiuj(int* skad, int* dokad, int N)
{
    int i;
    for(i=0;i<N; i++)
        *(dokad++)=*(skad++);
}


int main()
{
    int tablica[ROZMIAR];

    printf("Przed sortowaniem: 
");
    wypisz(nieposortowane, ROZMIAR);


    kopiuj(nieposortowane, tablica, ROZMIAR);
    babelki(tablica, ROZMIAR);

    printf("Po sortowaniu babelkowym: 
");
    wypisz(tablica, ROZMIAR);

    kopiuj(nieposortowane, tablica, ROZMIAR);
    wstawianie(tablica, ROZMIAR);

    printf("Po sortowaniu przez wstawianie: 
");
    wypisz(tablica, ROZMIAR);

    return 0;
}
Jak będzie wygladał kod po dodadniu do niego sortowania algorytmem gnoma?
Ostatnio zmieniony 19 lis 2013, o 19:39 przez Afish, łącznie zmieniany 2 razy.
Powód: Używaj [code] [/code] do cytowania kodu. Nie musisz powiększać tekstu dwukrotnie, by był czytelny i zrozumiały.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Sortowanie algorytmem gnoma

Post autor: kalwi »

od kiedy C++ ma #include <stdio.h> ?
a co do sortowania algorytmem gnoma, to na przykład tu masz algorytm:
... ome_sort#C
krystian1863
Użytkownik
Użytkownik
Posty: 121
Rejestracja: 3 maja 2010, o 17:23
Płeć: Mężczyzna
Lokalizacja: Ostrołęka
Podziękował: 14 razy
Pomógł: 2 razy

[C++] Sortowanie algorytmem gnoma

Post autor: krystian1863 »

Thx, to C, admin zapisał C++
Gouranga
Użytkownik
Użytkownik
Posty: 1584
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 245 razy

[C++] Sortowanie algorytmem gnoma

Post autor: Gouranga »

kalwi pisze:od kiedy C++ ma #include <stdio.h> ?
od zawsze? c++ ma dostęp do wszystkich bibliotek C i można używać stdio.h w c++, nie widzę problemu. To tylko głupia moda żeby używać iostream bo to coś, czego w C nie ma i tyle. W ogóle c++ to paskudna hybryda, ni to proceduralne, ni obiektowe, odrażajacy jezyk.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Sortowanie algorytmem gnoma

Post autor: Afish »

Gouranga pisze:c++ ma dostęp do wszystkich bibliotek C i można używać stdio.h w c++
To oczywiście prawda, aczkolwiek podejrzewam, że tutaj chodziło głównie o rozszerzenie .h - w C++ nagłówki standardowe nie mają go i na przykład w tym przypadku nagłówek nazywa się cstdio. Wyjątkiem są stare kompilatory, które ciągle stosują nazewnictwo zgodne z C (czyli stdio.h).
Gouranga
Użytkownik
Użytkownik
Posty: 1584
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 245 razy

[C++] Sortowanie algorytmem gnoma

Post autor: Gouranga »

Oczywiście masz rację, są odpowiedniki nagłówków dla c++ (cstdio, cstdlib itd.) aczkolwiek nie widziałem np. nigdy odpowiednika unistd.h bez rozszerzenia, tak samo stare windowsowe conio.h
a poza tym dla kompatybilności wstecznej kompilatory muszą rozumieć też nagłówki z .h
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Sortowanie algorytmem gnoma

Post autor: Afish »

Gouranga pisze:Oczywiście masz rację, są odpowiedniki nagłówków dla c++ (cstdio, cstdlib itd.) aczkolwiek nie widziałem np. nigdy odpowiednika unistd.h bez rozszerzenia, tak samo stare windowsowe conio.h
a poza tym dla kompatybilności wstecznej kompilatory muszą rozumieć też nagłówki z .h
Nie, kompatybilność wsteczna nie ma nic do tego - jak kompilator nie ma pliku o danym rozszerzeniu, to nie będzie zgadywał, co programista ma na myśli. Makra z C++ nie są inteligentne (jak w lispie) - służą tylko mechanicznemu podmienianiu odpowiednich fragmentów kodu i na tym poprzestają.
Osobną kwestią pozostaje fakt, że w terminologii C++ jest jeden wielki burdel - jedni dają .h, inni dają .hpp, jeszcze inni nie dają rozszerzenia. Nie ma powodu, aby się tym przejmować, dopóki tylko kod działa - przenośność i tak jest mitem, zatem nasza dyskusja jest czysto akademicka :)
ODPOWIEDZ