Sortowanie algorytmem quicksort problem z wyświetleniem
Ostatnio zmodyfikowano 2019-12-11 22:15
KonDZIKs Temat założony przez niniejszego użytkownika |
Sortowanie algorytmem quicksort problem z wyświetleniem » 2019-12-11 20:22:45 Witam jako ,że to mój pierwszy post wypadałoby się przedstawić. Nazywam się Konrad jestem studentem drugiego roku. Mam do wykonania zadanie które posortuje wprowadzone przez komputer liczby. Liczb nie może być więcej niż 100000. Problem z wpisywaniem nieokreślonej ilości liczb rozwiązałem pętla while. Lecz nie wiem jak poradzić sobie z wprowadzaniem. Mam pętle for w których 1 wpisana wartość to ilość obrotów pętli. Ogólnie algorytm działa poprawnie. Nie wiem tylko jak poradzić sobie z tym wpisywaniem. Bo gdy podamy np 20 i potem 3 66 -1 to konsola wyrzuci: 17x -852124 -1 3 66. Algorytm wziąłem z kanału Pasja-informatyki. Kod: #include <iostream>
#include <vector> using namespace std;
int ile, liczba;
void quicksort( int * tablica, int lewy, int prawy ) { int v = tablica[( lewy + prawy ) / 2 ]; int i, j, x; i = lewy; j = prawy; do { while( tablica[ i ] < v ) i++; while( tablica[ j ] > v ) j--; if( i <= j ) { x = tablica[ i ]; tablica[ i ] = tablica[ j ]; tablica[ j ] = x; i++; j--; } } while( i <= j ); if( j > lewy ) quicksort( tablica, lewy, j ); if( i < prawy ) quicksort( tablica, i, prawy ); }
int main() { while( cin >> ile && ile <= 100000 ) { int * tablica2; tablica2 = new int[ ile ]; for( int i = 0; i < ile; i++ ) { cin >> tablica2[ i ]; } quicksort( tablica2, 0, ile - 1 ); for( int i = 0; i < ile; i++ ) { cout << tablica2[ i ] << " " << endl; } delete[] tablica2; } return 0; }
Dziękuję za pomoc. |
|
nanoant20 |
» 2019-12-11 21:10:53 for( int i = 0; i < ile; i++ ) { cin >> liczba; tablica2[ i ] = liczba; }
|
|
pekfos |
» 2019-12-11 21:15:03 Bo gdy podamy np 20 i potem 3 66 -1 to konsola wyrzuci: 17x -852124 -1 3 66. |
Podałeś programowi, że będzie 20 liczb, a przerwałeś po podaniu trzech. Jak dla mnie, problem jest z użytkownikiem, nie programem. |
|
KonDZIKs Temat założony przez niniejszego użytkownika |
» 2019-12-11 22:08:34 Wiem ,że w tym tkwi problem. Tylko nie wiem jak go rozwiązać jak zastąpić tą ilość powtórzeń pętli wyłączeniem. |
|
pekfos |
» 2019-12-11 22:15:08 To znaczy co? Chcesz wczytywać liczby aż zostanie podana ujemna? Format warunku już miałeś niezły while( cin >> liczba && liczba >= 0 )
W pętli zapisuj liczby do tablicy. Albo użyj wektora, albo zwykłej, korzystając z założenia że zawsze jest nie więcej niż 100000 liczb. |
|
« 1 » |