Alguem pode me ajudar, estou testando um algoritmo de ordenação usando quicksort, o programa cadastra titulos de livros e compara usando compareTo. O problema é que ele não ordena corretamente. O que devo fazer?
O codigo segue abaixo:
package quicksort;
import javax.swing.*;
public class QuickSort {
public static void main(String[] args) {
Livro biblioteca[] = new Livro[Integer.parseInt(JOptionPane.showInputDialog(
"Informe o número de livros a serem\n cadastrados"))];
biblioteca = preencheLivros(biblioteca);
ordena(biblioteca);
mostrar(biblioteca);
} //main
//mostra biblioteca
static void mostrar(Livro biblioteca[]) {
String mostrar = "";
for (int i = 0; i < biblioteca.length; i++) {
mostrar += biblioteca[i].titulo + "\n";
}
JOptionPane.showMessageDialog(null, "" + mostrar);
}
//preencher livros
static Livro[] preencheLivros(Livro bib[]) {
for (int i = 0; i < bib.length; i++) {
bib[i] = new Livro();
bib[i].titulo = JOptionPane.showInputDialog("Informe o nome do livro: " +
(i + 1));
}
return bib;
}
//ordenação
static void ordena(Livro bib[]) {
quickSort(bib, 0, bib.length-1);
}
//ordenação com quicksort
static void quickSort(Livro bib[], int i, int j) {
if (i < j) {
String pivo = bib[ (i + j) / 2].titulo;
int m = divide(bib, pivo, i, j);
quickSort(bib, i, m - 1);
quickSort(bib, m + 1, j);
}
}
static int divide(Livro b[], String pivo, int i0, int j0) {
int i = i0 - 1;
int j = j0 + 1;
do {
do {
i++;
System.out.println(b[i].titulo.compareTo(pivo));
}
while (b[i].titulo.compareTo(pivo) > 0);
do {
j--;
System.out.println(b[i].titulo.compareTo(pivo));
}
while (b[j].titulo.compareTo(pivo) < 0);
if (i < j) {
troca(b, i, j);
}
}
while (i < j);
return j;
}
static void troca(Livro b[], int i, int j) {
Livro aux;
aux=b[i];
b[i]=b[j];
b[j]=aux;
}
}
class Livro {
String titulo;
String autor;
String editora;
int ano;
}
:?:
Obrigado
