Newsgroup: it.comp.java
Titolo: QuickSort, ecezione..

Salve a tutti, ho un problema con una classe che implementa il metodo
Quicksort. Mi da un'eccezione ma non riesco a capire dove ho sbagliato..
Questo è il metodo che si trova nella classe Sorts.
   public static void quickSort(int[] numbers,int primo,int ultimo)
   {
      int pivot, i,j,temp;
      if(primo < ultimo )
      {
      i=primo; j=ultimo+1;
      pivot = numbers[primo];
        do{
               do i++; while(numbers[i] < pivot);
               do j--; while( numbers[j] > pivot);
               if(i<j)
                {
                // Swap the values
                temp = numbers[i];
                numbers[i] = numbers[j];
                numbers[j] = temp;
                }
          }while(i < j);
     temp = numbers[primo];
     numbers[primo] = numbers[j];
     numbers[j] = temp;
     quickSort(numbers,primo,j-1,flag);
     quickSort(numbers,j+1,ultimo,flag);
      }
    }
Questa è l'invocazione del metodo:
      Sorts.quickSort (grades,0,11);
Questo è il vettore che devo ordinare:
      int[] grades = {12,11,10,9,8,7,6,5,4,3,2,1};
l'errore che ricevo è:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12
    at Sorts.quickSort (Sorts.java:89)
    at SortGrades.main(SortGrades.java:18)
dove     at Sorts.quickSort (Sorts.java:89) corrisponde all'istruzione    do
j--; while( numbers[j] > pivot);    del metodo quickSort, e
dove     at SortGrades.main(SortGrades.java:18) corrisponde all'invocazione
del metodo dal main.
Non riesco a capire dove sbaglio nell'indicizzazione, se sbaglio
nell'invocazione del metodo o dove.. La cosa strana (per me) è che ho
riscritto e compilato lo stesso programma (ovviamente leggermente
modificato) in c e c++ usando MSvisual c++ e devc++, e li l'algoritmo
funziona perfettamente.
Ringraziando, aspetto lumi :)

 wrote in message
news:Dbqqb.101016$e5.36...@news1.tin.it...


 nell'invocazione del metodo o dove.. La cosa strana (per me) č che ho


 Questo č il metodo che si trova nella classe Sorts.
Ti conviene avere a disposizione un debugger, cosě č molto + semplice 
trovare l'errore.
Cmq,
quando fai
do i++; while(numbers[i] < pivot);
ti da errore perchč prima incrementi i e poi controlli se l'elemento 
nell'array corrisponde al pivot.
Cosi facendo alla prima iterazione controlli il secondo elemento 
dell'array(e non il primo come vorresti). Non trovando l'elemento 
cercato(12 si trova in numbers[0]) il ciclo continua ad incrementare "i" 
finchč non esce dai limiti dell'array e causa l'eccezione.
Marco
-- 
replay: remove .duh.spam
http://web.ticino.com/cthulhu/

 Ivan
Ti ringrazio, ma mi da ancora  le stesse eccezioni.. :(

 wrote in message
news:bodfql$aaa$1...@newshispeed.ch...


public class QuickSort {
    public static void main(String[] args) {
 int[] grades = {12,11,10,9,8,7,6,5,4,3,2,1};
       QuickSort.quickSort (grades,0,grades.length);
    }
   public static void quickSort(int[] numbers,int primo,int ultimo) {
      int pivot, i,j,temp;
      if(primo < ultimo ) {
       i=primo-1; j=ultimo;
  pivot = numbers[primo];
  do{
   do i++; while( numbers[i] < pivot);
   do j--; while( numbers[j] > pivot);
   if(i<j) {
   // Swap the values
   temp = numbers[i];
   numbers[i] = numbers[j];
   numbers[j] = temp;
          }
  } while(i < j);
 temp = numbers[primo];
 numbers[primo] = numbers[j];
 numbers[j] = temp;
 quickSort(numbers,0,j-1);
 quickSort(numbers,j+1,ultimo);
     }
   }
}
Mi sembra strano visto che questa compila e runna

hai ragione, questo funziona perfettamente. Quando ho sostituito quella riga
nel mio programma invece non andava.. ^__^ Si vede che avevo fatto qualche
casino :P
Ti ringrazio, ciao :)
"¤ Ivan ¤" <flaggell...@VEtiscali.it> wrote in message
news:rsuqb.95081$vO5.3...@twister1.libero.it...
