[c++] bład odwołania do tablicy przy wywołaniu rekureuncyjnym

0

witam

wywala mi blad ze wskaznik do tablicy jest pusty, czy cos takiego, wiec podejrzewam ze jakos źle przekazuje tablice w wywołaniu rekurencyjnym tylko nie wiem dlaczego zle.

 void qSort(int * tablica,int lewy, int prawy){

  int i,j,piwot;



  i = (lewy + prawy) / 2;

  piwot = tablica[i];

  tablica[i] = tablica[prawy];

  for(j = i = lewy; i < prawy; i++)

  if(tablica[i] < piwot)

  {

    swap(tablica[i], tablica[j]);

    j++;

  }

  tablica[prawy] = tablica[j];

  tablica[j] = piwot;

  if(lewy < j - 1){

    qSort(tablica,lewy, j - 1);

  } 



  if(j + 1 < prawy){

    qSort(tablica,j + 1, prawy);

  }
}
0

Dla której linijki wyrzuca Ci ten błąd? I pokaż w jaki sposób wywołujesz tę funkcję po raz 1.

0
 
//mam tablice zdefiniowana
int tablica[N];

//wywołuje

qSort(tablica,0,N-1);

błąd wywala w

 
qSort(tablica,lewy, j - 1);
0

<code = cpp>int tablica[N];


Jak mniemam, zmienna N nie jest stała i użytkownik sam ją wprowadza? Jeśli tak, to musisz użyć dynamicznego przydzielania pamięci:

<code = cpp> int N;
int *tab;
cin >> N:
tab = new int[N];

I powinno działać.

0

int const N = 10000;

1

Generalnie trochę masz pokićkane w tym algorytmie. Zajrzyj sobie tutaj -> http://www.elektroda.pl/rtvforum/topic421135.html

0

czy to mozliwe aby uporzadkowanie 1000000 liczb w quicksort trwalo 72ms ? czy jest jakis blad ? bo w babelkowym trwa to minute

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