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

brak dzialania quicksort

Ostatnio zmodyfikowano 2016-07-15 22:43
Autor Wiadomość
ares1337
Temat założony przez niniejszego użytkownika
brak dzialania quicksort
» 2016-07-15 21:14:05
Od dłuższego czasu męczę się nad zaimplementowaniem quicksort'u i mimo wielu prób naprawy kodu, nie potrafię znaleźć błędu, który uniemożliwia sortowanie wylosowanych liczb. Byłbym bardzo wdzięczny za pomoc.


C/C++
#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;


void quicksort( int * tab, int left, int right )
{
    int pivot = tab[( left + right ) / 2 ];
    int i = left;
    int j = right;
    do {
        while( tab[ i ] < pivot ) i++;
       
        while( tab[ j ] > pivot ) j--;
       
        if( i <= j )
        {
            int x = tab[ i ];
            tab[ i ] = tab[ j ];
            tab[ j ] = x;
        } } while( i <= j );
   
    if( left < j ) quicksort( tab, left, j );
   
    if( right > i ) quicksort( tab, i, right );
   
    for( int n = 0; n < right - 1; n++ )
    {
        cout << endl << tab[ n ];
    }
   
}
int main()
{
    int how_many;
    cout << "How many random numbers you want to sort out: ";
    cin >> how_many;
    int * random;
    random = new int[ how_many ];
   
    srand( time( NULL ) );
    for( int i = 0; i < how_many; i++ )
    {
        random[ i ] = rand() % 100 + 1;
    }
   
    quicksort( random, random[ 0 ], random[ how_many - 1 ] );
   
   
    return 0;
}
P-150009
carlosmay
» 2016-07-15 22:43:08
Użyj debuggera do szukania błędu w logice programu.
Praca krokowa pozwoli znaleźć błąd.

edit:
C/C++
random = new int[ how_many ];
A gdzie zwolnienie pamięci.
new
 i
delete
 to nierozłączna para.

Są kontenery, które będą tego pilnować za ciebie, np.std::vector<>
C/C++
#include <vector>

int main()
{
    std::vector < int > random;
    size_t how_many;
    std::cin >> how_many;
   
    for( size_t i = 0; i < how_many; ++i ) {
        random.push_back( rand() % 100 + 1 );
    }
   
    for( const int & element: random ) {
        cout << element << ' ';
    }
}

Popatrz tutaj
P-150016
« 1 »
  Strona 1 z 1