Tablica jako argument funkcji

0

Witam
mam dosyć prosty ale irytujący mnie błąd :P
projektuje aplikacje która ma za zadanie sprawdzać szybkość algorytmów sortowania.
Na początku losuje ciąg liczb do tablicy a następnie używam algorytmu sortowania na niej w taki sposób :

 public void QuickSort( int []tab, int left, int right )
{
    int i = left;
    int j = right;
    int x = tab[( left + right ) / 2 ];
    int tmp; 
          
    do
    {
        while( tab[ i ] < x )
             i++;
        
        while( tab[ j ] > x )
             j--;
        
        if( i <= j )
        {
            tmp = tab[i];
            tab[i] = tab[j];
            tab[j] = tmp;
           // swap( tab[ i ], tab[ j ] );
            
            i++;
            j--;
        }
    } while( i <= j );
    
    if( left < j ) QuickSort( tab, left, j );
    
    if( right > i ) QuickSort( tab, i, right );
    
}

Jak zrobić aby po wyjściu z tej funkcji tablica nadal była nieuporządkowana ? ponieważ chciałbym ją wykorzystać by sprawdzić inne algorytmy.

2

Możesz przykładowo zrobić

.Clone()

na swojej tablicy i przekazać ją wtedy jako parametr - to jest jedno z wyjść.

Przyczyna jest prosta, tablica jest po prostu typem referencyjnym i przekazując ją przekazujesz faktycznie dokładnie ten egzemplarz, a nie jej kopię. Dlatego gdy funkcja coś w niej zmieni to zwracana jest ona już po zmianach jakie zaszły. Dlatego możesz zrobić klona tej tablicy i wtedy ją przekazać do funkcji.

0

tak właśnie zrobiłem, tylko trochę mnie to bolało że trochę bezsensu muszę tworzyć drugą tablicę, i przed odpaleniem każdego algorytmu pamiętać by przerzucać tą nieuporządkowaną tablicę, no ale skoro nie ma innego wyjścia... dzięki za odpowiedź :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1