Sr´s, bom dia !!
O Código abaixo feito com um MergeSort, faz com que seja feita uma ordenação por nome , porém eu preciso fazer com que, se houver algum aluno a mais com o mesmo nome, o vetor seja ordenado pela matricula, porém não sei como fazer…vocês poderiam clarear as ideias para mim ?
será que é necessário criar um novo vetor de matricula no método intercala?
Obrigado.
public class TesteMergeSort {
public static void main(String[] args){
Aluno rafael = new Aluno("Rafael",100000,13);
Aluno sakurai = new Aluno("Sakurai",100023,20);
Aluno cristiano = new Aluno("Cristiano",101010,3);
Aluno rafael2 = new Aluno("Rafael",100011,10);
Aluno[] alunos = {rafael, sakurai, cristiano, rafael2};
mergeSort(0, alunos.length, alunos);
for(int tamanho = 0; tamanho < alunos.length; tamanho++){
System.out.println(alunos[tamanho].getNome() + " - " + alunos[tamanho].getMatricula()+ " - " +
alunos[tamanho].getNumChamada());
}
}
private static void mergeSort(int inicio, int fim, Aluno[] alunos){
if(inicio < fim - 1){
int meio = (inicio + fim) / 2;
mergeSort(inicio, meio, alunos);
intercala(alunos, inicio, meio, fim);
}
}
private static void intercala(Aluno[] alunos, int inicio, int meio, int fim){
Aluno novoVetor[] = new Aluno[fim - inicio];
int i = inicio;
int m = meio;
int pos = 0;
while(i < meio && m < fim){
if(alunos[i].getNome().compareToIgnoreCase(alunos[m].getNome()) <=0){
novoVetor[pos] = alunos[i];
pos = pos + 1;
i = i + 1;
}
else{
novoVetor[pos] = alunos[m];
pos = pos + 1;
m = m + 1;
}
}
while(i < meio){
novoVetor[pos] = alunos[i];
pos = pos + 1;
i = i + 1;
}
while(m < fim){
novoVetor[pos] = alunos[m];
pos = pos + 1;
m = m + 1;
}
for(pos = 0, i = inicio; i<fim; i++, pos++){
alunos[i] = novoVetor[pos];
}
}
}