dakruzz Temat założony przez niniejszego użytkownika |
[C++] Przesuniecie elementow tablicy dynamicznej » 2016-12-05 22:20:56 Założenie: przesunąć najmniejsze elementy tablicy dynamicznej na początek. Gdzieś jest błąd i od paru godzin nie wiem gdzie. Może czas kupić sobie kaczuszkę? Fragment, który nie działa mini = tablica[ 0 ]; for( int i = 0; i < 20; i++ ) { if( tablica[ i ] < mini ) mini = tablica[ i ]; if( i == 0 ) continue; else { for( int j = i; j > 0; j-- ) { tablica[ j ] = tablica[ j - 1 ]; tablica[ 0 ] = mini; } } }
Przed przesunięciem najmniejszych elementów(czyli 0): 2 6 1 0 9 0 0 5 6 3 2 4 5 2 7 7 9 1 1 4 Po: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 Cały kod: http://pastebin.com/aKPF6WKB |
|
mateczek |
» 2016-12-06 06:33:24 chcesz sortować (poukładać liczby) czy znaleźć minimum?? czy znaleźć minimum i policzyć ile razy wystąpiło ?? tak czy siak: #include <iostream> #include<algorithm> using namespace std; int main() { int dane[ 9 ] = { 9, 1, 1, 2, 5, 2, 3, 1, 3 }; int minimum = dane[ 0 ]; int licznik = 0; for( int i = 0; i < 9; i++ ) { if( dane[ i ] < minimum ) { minimum = dane[ i ]; licznik = 1; } else if( dane[ i ] == minimum ) licznik++; } cout << "najmniejsz liczba to: " << minimum << " i wystapila: " << licznik << " razy" << endl; sort( dane, dane + 9 ); for( int i = 0; i < 9; i++ ) { cout << dane[ i ] << " "; } }
|
|
dakruzz Temat założony przez niniejszego użytkownika |
» 2016-12-06 11:40:39 znaleźć minimum i przesunąć je na początek
czyli: 3 6 1 9 7 1 7 Po: 1 1 3 6 9 7 7
i raczej bez ten nowej biblioteki, chociaż jeśli możesz, to weź wytłumacz działanie, może da się przerobić ją, żeby tylko przesortowała minimalne wartości |
|
czaffik |
» 2016-12-06 13:27:07 Ładnie żeś nakombinował z tym "przesuwaniem najmniejszych elementów" xD Nadpisujesz sobie elementy tablicy tymi samymi wartościami stąd masz ciąg zer. Czyli normalnie chcesz posortować, ale jak już chcesz sortować w ten sposób że znajdujesz najmniejszy element i przesuwasz go na początek i tak dalej to proponowałbym taki kod: for( int a = 0; a < 20; a++ ) { int min = tab[ a ]; int n = a; for( int i = a + 1; i < size; i++ ) { if( tab[ i ] < min ) { min = tab[ i ]; n = i; } } int tmp = tab[ a ]; tab[ a ] = tab[ n ]; tab[ n ] = tmp; }
Jak się nie mylę to będzie sortowanie przez wstawianie. |
|
dakruzz Temat założony przez niniejszego użytkownika |
» 2016-12-06 13:54:14 nie wiem jak u Ciebie, ale u mnie ten kod sortuje całą zawartość tablicy, a powinien przesunąć tylko najmniejszy element(tak jak opisałem na górze) |
|
mokrowski |
» 2016-12-06 15:18:56 #include <algorithm> #include <vector> #include <iostream>
using namespace std;
int main() { auto vec = vector < int > { 5, 6, 4, 3, 7, 100, 1 }; nth_element( vec.begin(), vec.begin(), vec.end() ); cout << *( vec.begin() ) << endl; }
https://en.wikipedia.org/wiki/Selection_algorithm |
|
mateczek |
» 2016-12-06 17:34:40 #include <vector> #include <iostream>
using namespace std;
int main() { vector < int > tablica { 5, 6, 4, 0, 3, 7, 0, 100, 1 }; vector < int > wynikowa; int min = tablica[ 0 ]; for( int element: tablica ) { if( element < min ) { min = element; } } for( int element: tablica ) { if( element == min ) wynikowa.insert( wynikowa.begin(), element ); else wynikowa.push_back( element ); } for( int element: wynikowa ) { cout << element << " "; } } |
|
czaffik |
» 2016-12-07 11:50:39 To chodziło ci o przesunięcie wszystkich wystąpień minimalnej wartości na początek tablicy. Nie korzystając ze standardu c++11, który wykorzystali poprzednicy, można zrobić tak (nie wiem jaki kompilator wykorzystujesz, ale MinGW domyślnie ma wyłączoną obsługę tego standardu): const int size = 7; int tab[ size ] = { 3, 6, 1, 9, 7, 1, 7 };
int min = tab[ 0 ]; for( int i = 1; i < size; i++ ) { if( tab[ i ] < min ) min = tab[ i ]; }
int tmp; for( int i = 1, j = 0; i < size; i++ ) { if( tab[ i ] == min ) { for( int j = i; j > 0; j-- ) { tmp = tab[ j ]; tab[ j ] = tab[ j - 1 ]; tab[ j - 1 ] = tmp; } } }
for( int i = 0; i < size; i++ ) cout << tab[ i ] << " ";
cout << endl;
lub lepiej wykorzystać zamiast zwykłej tablic klasę vector: vector < int > tab; tab.push_back( 3 ); tab.push_back( 6 ); tab.push_back( 1 ); tab.push_back( 9 ); tab.push_back( 7 ); tab.push_back( 1 ); tab.push_back( 7 );
int min = tab[ 0 ]; for( int i = 1; i < tab.size(); i++ ) { if( tab[ i ] < min ) min = tab[ i ]; }
for( int i = 1; i < tab.size(); i++ ) { if( tab[ i ] == min ) { tab.insert( tab.begin(), tab[ i ] ); tab.erase( tab.begin() + i + 1 ); } }
for( int i = 0; i < tab.size(); i++ ) { cout << tab[ i ] << " "; } cout << endl;
|
|
« 1 » |