Galera, tenho um trabalho da faculdade pra fazer sobre Selection Sort, preciso implementar ele com String e o exemplo que achei na internet é com Int… alguem teria um codigo ai mostrando como mudar?? ou saberia como ajudar? ai vai o codigo que eu tenho…
[void selectionSort(int numbers[], int array_size)
{
int i, j;
int min, temp;
for (i = 0; i < array_size-1; i++)
{
min = i;
for (j = i+1; j < array_size; j++)
{
if (numbers[j] < numbers[min])
min = j;
}
temp = numbers[i];
numbers[i] = numbers[min];
numbers[min] = temp;
}
}
Valeu petrônio pelo link mas preciso fazer um selection sort de Strings, o que tu me mostrou no link é o mesmo que eu tenho aqui, que funciona pra inteiros…
obrigado mesmo assim…
Modifiquei o codigo mas mesmo assim ainda nao consigo passar Strings nele, ao inves de inteiros… Alguem saberia como ajudar?
[code]
public class SelectionSort {
private long[] a;
private int nElems;
public SelectionSort(int max) {
a = new long[max];
nElems = 0;
}
public void insert(long value) {
a[nElems] = value;
nElems++;
}
public void display() {
for (int j = 0; j < nElems; j++)
System.out.print(a[j] + " “);
System.out.println(”");
}
public void selectionSort() {
int out, in, min;
for (out = 0; out < nElems - 1; out++) // outer loop
{
min = out; // minimum
for (in = out + 1; in < nElems; in++)
// inner loop
if (a[in] < a[min]) // if min greater,
min = in; // a new min
swap(out, min); // swap them
}
}
private void swap(int one, int two) {
long temp = a[one];
a[one] = a[two];
a[two] = temp;
}
public static void main(String[] args) {
int maxSize = 100;
SelectionSort arr; // reference to array
arr = new SelectionSort(maxSize); // create the array
Primeiro problema: Seus métodos responsáveis pela ordenação estão recebendo parametro do tipo long. Se vc quer ordenar String, eles têm que receber String por parâmetro…
Segundo: Em java, não tem como vc comparar dois Strings usando os operadores de desigualdade (<, <=, >, >=, !=). Vc tem que se valer de um método provido pela classe String chamado compareTo. Este método é invocado a partir de um String e recebe por parâmetro um outro String. O retorno deste método é um int, o qual vc pode interpretar da seguinte forma:
:arrow: Retorno é um número negativo: O String que invoca o compareTo é “menor” que o String que foi passado por parâmetro.
:arrow: Retorno é um número positivo: O String que invoca o compareTo é “maior” que o String que foi passado por parâmetro.
:arrow: Retorno é zero: O String que invoca o compareTo é igual ao String que foi passado por parâmetro.
Vou colocar um programinha de exemplo aqui pra te ajudar a entender melhor como funciona esse lance do compareTo. Rode o programa, teste algumas entradas, veja os resultados e analise o código. Creio que isto vá te ajudar no seu trabalho.
import javax.swing.JOptionPane;
public class TesteCompareTo {
public static String pegaStringDoUsuario(String mensagem) {
String result = JOptionPane.showInputDialog(
null,
mensagem,
"Testando o método \"compareTo()\"",
JOptionPane.QUESTION_MESSAGE);
if(result == null)
return "";
else
return result;
}
public static String comparaStrings(
String stringQueInvoca,
String stringPassadaPorParametro)
{
int resultadoComparacao =
stringQueInvoca.compareTo(stringPassadaPorParametro);
if(resultadoComparacao < 0) {
return "\"" + stringQueInvoca + "\" é menor que \"" + stringPassadaPorParametro + "\"";
}else {
if(resultadoComparacao > 0) {
return "\"" + stringQueInvoca + "\" é maior que \"" + stringPassadaPorParametro + "\"";
}else {//Caso em que resultadoComparacao == 0
return "\"" + stringQueInvoca + "\" é igual a \"" + stringPassadaPorParametro + "\"";
}
}
}
public static void main(String[] args) {
int opt;
do {
String stringQueInvoca = pegaStringDoUsuario(
"Entre com o String que invoca o \"compareTo\""
);
String stringPassadaPorParametro = pegaStringDoUsuario(
"Entre com o String passado por parâmetro para o \"compareTo\""
);
String comparacao =
comparaStrings(stringQueInvoca, stringPassadaPorParametro);
JOptionPane.showMessageDialog(null, comparacao);
opt = JOptionPane.showConfirmDialog(null, "Mais um teste?");
}while(opt == JOptionPane.YES_OPTION);
}
}