Salve a tutti,
devo creare un programma che ordini una sequenza di oggetti (nel caso specifico numeri) tramite l'algoritmo quicksort, sul quale poi dovrò anche fare una serie di apprezzamenti per quanto riguarda nello specifico il tempo di esecuzione, il numero di scambi ecc.
Per il momento cmq mi interessa sapere cosa ci sia di errato in questa parte del codice, relativa al metodo di ordinamento ricorsivo vero e proprio:
codice:
import java.util.*;
public class QuickSort
{
public void qSort(ArrayList S)
{
if (S.size()<=1) return;
Integer p=S.size()-1;
ArrayList L=new ArrayList();
ArrayList G=new ArrayList();
ArrayList E=new ArrayList();
while (!S.isEmpty())
{
if (((Comparable)S.get(S.size()-1)).compareTo(p)<0)
L.add(L.size(),S.remove(S.size()-1));
else if (((Comparable)S.get(S.size()-1)).compareTo(p)==0)
E.add(E.size(),S.remove(S.size()-1));
else G.add(G.size(),S.remove(S.size()-1));
}
qSort(L);
qSort(G);
while (!L.isEmpty())
S.add(S.size(),L.remove(0));
while (!E.isEmpty())
S.add(S.size(),E.remove(0));
while (!G.isEmpty())
S.add(S.size(),G.remove(0));
return;
}
}
L'errore lanciato in esecuzione, utilizzando per esempio il seguente main di prova, mi rimanda alla riga 21 della classe QuickSort quindi a qSort(G):
codice:
import java.util.*;
public class QuickProva
{
public static void main(String[] args)
{
ArrayList<Integer> A=new ArrayList<Integer>();
A.add(8);
A.add(23);
A.add(1);
A.add(34);
A.add(5);
A.add(8);
A.add(6);
A.add(5);
System.out.println("Array iniziale: "+A);
QuickSort p=new QuickSort();
p.qSort(A);
System.out.println("Array ordinato: "+A);
}
}
Sapreste spiegarmi il perchè?
Altra cosa: come si chiama nella libreria di Java la classe contenente un timer da poter inserire all'interno del codice che restituisca quindi il tempo di esecuzione di una determinata parte di esso?
Grazie!