Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Lekcja 43 - posortowanie liczb od najmniejsze do największej

Ostatnio zmodyfikowano 2018-03-11 00:11
Autor Wiadomość
pekfos
» 2018-02-21 15:40:42
minindeks jest niepotrzebnie skomplikowane w użyciu i implementacji, poza tym może być.
P-169566
marcinpro
Temat założony przez niniejszego użytkownika
» 2018-02-26 20:04:45
Powiem szczerze, że zastanawiałem się jak to uprościć i nie mam pomysłu. Jest jakiś sposób aby na wskaźnikach inaczej wyznaczyć na której pozycji jest najmniejszy element?
P-169628
YooSy
» 2018-03-01 22:29:11
C/C++
int * minindeks( int * begin, int * end )

{
    int * tmp = begin;
    ++begin; // przesuwamy wskaźnik aby rozpocząć iterację od następnego elementu
    // można skrócić ten zapis do jednej linii 'int *tmp = begin++;'
    while( begin != end )
    {
        if( * begin < * tmp ) // porównujemy wartości pod tymi skaźnikami
        {
            tmp = begin; // zamieniamy adres na jaki patrzy tmp
        }
        begin++; // następny
    }
    return tmp; // zwracamy znaleziony adres
}

C/C++
void sortuj( int * begin, int * end )
{
    while( begin != end )
    {
        int * mine = minindeks( begin, end );
        if( * begin != * mine ) // wcześniejszej linii można uniknąć kosztem czytelności
        // 'if(*begin, *minindeks(begin, end))'
             swap( * begin, * mine );
       
        begin++;
    }
}
P-169675
marcinpro
Temat założony przez niniejszego użytkownika
» 2018-03-02 09:09:38
Dzięki za przykład. Czyli wystarczyło stworzyć drugi wskaźnik, skopiować adres pierwszego elementu do niego i porównywać wartości. Znacznie łatwiejszy zapis.
P-169677
twoxu
» 2018-03-11 00:11:45
Może i jest to klepanie się po plecach, które bynajmniej nie pomaga OP, ale stworzyłem jeszcze krótszy zapis.
C/C++
#include <iostream>
void sortuj( int * begin, int * end )
{
    while( begin != end )
    {
        int mn = 0;
        int * b = begin;
        while( b != end )
        {
            if( * b > mn )
                 std::swap( * b, mn );
           
            b++;
        }
        if( * begin <= mn )
             * begin = mn;
       
        begin++;
    }
}
void wypisz( int * begin, int size )
{
    while( size > 0 )
    {
        std::cout << * begin << ' ';
        ++begin;
        --size;
    }
}
int main()
{
    int tab[ 10 ] = { 0, 9, 1, 3, 8, 2, 6, 7, 5, 4 };
    sortuj( tab, tab + 10 );
    wypisz( tab, 10 );
}
P-169901
1 « 2 »
Poprzednia strona Strona 2 z 2