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ść
marcinpro
Temat założony przez niniejszego użytkownika
Lekcja 43 - posortowanie liczb od najmniejsze do największej
» 2018-02-19 17:46:21
Witam, przerabiam dalej kurs i mocno utkałem na sortowaniu na wskaźnikach. Potrzebuje porady jak się w ogóle za to zabrać.

C/C++
#include <iostream>

using namespace std;

void sortuj( int * begin, int * end )

{
    while( begin != end )
    {
       
    }
   
}

void wypisz( int * begin, int size )

{
    while( size > 0 )
    {
        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 );
   
    return 0;
}
P-169519
wojownik266
» 2018-02-19 18:04:08
Po co wyważać otwarte dżwi skoro jest do tego odpowiedni algorytm?
C/C++
#include <iostream>
#include <algorithm> //sort
using namespace std;

int main()

{
   
    int tab[ 10 ] = { 0, 9, 1, 3, 8, 2, 6, 7, 5, 4 };
    sort( tab, tab + 10 );
    for( int i = 0; i < 10; ++i )
         cout << tab[ i ] << endl; // Po posortowaniu
   
    return 0;
}
P-169522
pekfos
» 2018-02-19 18:06:27
https://pl.wikipedia.org/wiki​/Sortowanie_przez_wybieranie

Po co wyważać otwarte dżwi skoro jest do tego odpowiedni algorytm?
No właśnie, po co rozwiązywać zadania, skoro są gotowce. Zupełnie jakby nie chodziło o naukę, czy coś..
P-169523
marcinpro
Temat założony przez niniejszego użytkownika
» 2018-02-19 18:49:20
Dzięki za odpowiedzi. No właśnie bardziej chciałbym logikę tego zrozumieć niż żeby za mnie do funkcja zrobiła. Ogólnie muszę zrobić tak przeszukać tablicę znaleźć indeks gdzie jest największa wartość i zamienić ją z ostatnią, zmniejszyć pole do szukania o 1 i w kółko aż się tab skończy. Narazie mam problem ze składnią. Np. nie wiem jak na tej wiki to ma sortować skoro nie udostępnia tablicy w funkcji.

C/C++
#include <iostream>

using namespace std;

int maxele( int n )

{
    int max = 0;
    for( int i = 1; i < n; i++ )
    if( t[ max ] < t[ i ] )
         max = i;
   
    return max;
}

void sortuj( int * begin, int * end )

{
    for( int i = * end; i > 1; i-- )
    {
        int max = maxele( end );
    }
   
}

void wypisz( int * begin, int size )

{
    while( size > 0 )
    {
        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 );
   
    return 0;
}
P-169525
pekfos
» 2018-02-19 19:12:27
Nie sugeruj się implementacją z wikipedii, ta pierwsza jest tragiczna. Interesuje cię tylko to
  • wyszukaj minimalną wartość z tablicy spośród elementów od i do końca tablicy
  • zamień wartość minimalną, z elementem na pozycji i
P-169526
marcinpro
Temat założony przez niniejszego użytkownika
» 2018-02-19 19:57:18
Ok, na ten moment tyle mam, niby się kompiluje, włącza, ale nie sortuje. Nie mam już dzisiaj do tego głowy.

C/C++
#include <iostream>

using namespace std;


void sortuj( int * begin, int * end )

{
    int minele = 0;
    for( int i = 0; i > 9; i++ )
    {
        for( int i2 = i + 1; i2 < 9; i2++ )
        {
            if( *( begin + i2 ) < *( begin + minele ) )
           
                 minele = i2;
           
            swap( *( begin + minele ), *( begin + i2 ) );
           
        }
    }
   
   
}

void wypisz( int * begin, int size )

{
    while( size > 0 )
    {
        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 );
   
    return 0;
}
P-169527
pekfos
» 2018-02-19 20:11:42
Jeśli będziesz traktować te 2 kroki dosłownie co do litery, to tylko będziesz sobie utrudniać zadanie. Twój kod już jest przekombinowany z tego powodu.
P-169528
marcinpro
Temat założony przez niniejszego użytkownika
» 2018-02-21 11:48:20
Słuchaj zrobiłem to narazie tak, nie sortuje dokońca dobrze =, ale coś się dzieje. Nie wiem dlaczego program wykonuje się więcej niż 10 razy...
Błąd taki bo źle sprawdzam indeks najmniejszej wartości.

C/C++
#include <iostream>


using namespace std;

int minindeks( int * begin, int * end )

{
    int minindeks = 0;
    int wartosc = * begin;
    while( begin != end )
    {
        if( * begin < wartosc )
        {
            minindeks++;
            wartosc = * begin;
           
        }
        cout << minindeks << endl;
        begin++;
       
    }
    return minindeks;
}

void sortuj( int * begin, int * end )

{
   
    while( begin != end )
    {
        int mine = minindeks( begin, end );
        if( * begin != *( begin + mine ) )
             swap( * begin, *( begin + mine ) );
       
        begin++;
       
    }
   
   
}

void wypisz( int * begin, int size )

{
    while( size > 0 )
    {
        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 );
   
    return 0;
}



O teraz działa, ale pewnie za dużo tu kombinuje, ale nie wiem jak inaczej to zrobić na ten moment.


C/C++
#include <iostream>


using namespace std;

int minindeks( int * begin, int * end )

{
    int a = 0;
    int minindeks = 0;
    int wartosc = * begin;
    while( begin != end )
    {
        if( * begin < wartosc )
        {
            minindeks = a;
            wartosc = * begin;
           
        }
        cout << minindeks << endl;
        begin++;
        a++;
       
    }
    return minindeks;
}

void sortuj( int * begin, int * end )

{
   
    while( begin != end )
    {
        int mine = minindeks( begin, end );
        if( * begin != *( begin + mine ) )
             swap( * begin, *( begin + mine ) );
       
        begin++;
       
    }
   
   
}

void wypisz( int * begin, int size )

{
    while( size > 0 )
    {
        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 );
   
    return 0;
}
P-169564
« 1 » 2
  Strona 1 z 2 Następna strona