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ć. #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; }
|
|
wojownik266 |
» 2018-02-19 18:04:08 Po co wyważać otwarte dżwi skoro jest do tego odpowiedni algorytm? #include <iostream> #include <algorithm> 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; return 0; } |
|
pekfos |
» 2018-02-19 18:06:27 |
|
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. #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; }
|
|
pekfos |
» 2018-02-19 19:12:27 Nie sugeruj się implementacją z wikipedii, ta pierwsza jest tragiczna. Interesuje cię tylko to |
|
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. #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; }
|
|
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. |
|
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. #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. #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; }
|
|
« 1 » 2 |