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

Sortowanie algorytmem quicksort problem z wyświetleniem

Ostatnio zmodyfikowano 2019-12-11 22:15
Autor Wiadomość
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:
C/C++
#include <iostream>
//#include <cstdlib>
//#include <time.h>z
#include <vector>
using namespace std;

//vector<int> TAB;
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 ) {
       
        /*srand(time(NULL));
        ile = rand() % 100000 + 1;*/
       
        //dynamiczna alokacja tablicy
       
        int * tablica2;
        tablica2 = new int[ ile ];
       
       
        //wczytywanie losowych liczb do tablicy
        for( int i = 0; i < ile; i++ )
        {
            cin >> tablica2[ i ];
            /*TAB.push_back(ile);*/
        }
       
       
       
        quicksort( tablica2, 0, ile - 1 );
       
       
       
        for( int i = 0; i < ile; i++ )
        {
            cout << tablica2[ i ] << " " << endl;
            //TAB.pop_back();
        }
       
        delete[] tablica2;
    }
    return 0;
}
Dziękuję za pomoc.
P-175769
nanoant20
» 2019-12-11 21:10:53
C/C++
//wczytywanie losowych liczb do tablicy
for( int i = 0; i < ile; i++ )
{
    //cin >> tablica2[ i ]; //?
   
    cin >> liczba;
    tablica2[ i ] = liczba;
   
    /*TAB.push_back(ile);*/
}

P-175773
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.
P-175774
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.
P-175779
pekfos
» 2019-12-11 22:15:08
To znaczy co? Chcesz wczytywać liczby aż zostanie podana ujemna? Format warunku już miałeś niezły
C/C++
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.
P-175780
« 1 »
  Strona 1 z 1