Selection Sort

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;
  }
}

]

Lucas Brito,

dá uma olhada neste link abaixo

http://www.leepoint.net/notes-java/data/arrays/31arrayselectionsort.html

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

arr.insert(17); // insert 10 items
arr.insert(29);
arr.insert(34);
arr.insert(45);
arr.insert(52);
arr.insert(68);
arr.insert(71);
arr.insert(80);
arr.insert(96);
arr.insert(33);

arr.display();

arr.selectionSort();

arr.display();

}

}
[\code]

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);
	}

}

Qualquer dúvida, poste mais.
Divirta-se!

package br.com.hugov.outros;

public class SelectionSort {
	
	
	
	/**
	 * @param args
	 */
	public static void main(String args[]) {
		
		String texto[] = new String[5];
		
		texto[0] = "ggg"; 
		texto[1] = "bbb";
		texto[2] = "aaa";
		texto[3] = "fff";
		texto[4] = "eee";
		
		
		
		for(int i = 0 ; i &lt texto.length ; i++)
			System.out.println(texto[i]);
		
		selectionSort(texto, 5);
		
		System.out.println("\n");
		
		for(int i = 0 ; i &lt texto.length ; i++)
			System.out.println(texto[i]);
	}
	
	// retorno -1 não existe entrada ou entrada incorreta
	// retorno 0 entrada igual a null
	// retorno 1 primeiro valor é maior
	// retorno 2 segundo valor é maior
	public static int comparacaoString(String valor1 , String valor2 , int posicao , int retornoAnterior) {
		
		int aux = 0;
		int c1 = 0;
		int c2 = 0;
		
		if( (valor1 == "") || (valor2 == "") )
			return -1;
		
		for(int i = posicao ; i &lt valor1.length(); i++) {
			
			c1 = (int)valor1.charAt(i);
			c2 = (int)valor2.charAt(i);
			
			if( c1 &lt= c2 ){
				
				if(retornoAnterior == 1) {
					comparacaoString(valor1, valor2, i+1, 1);
					aux = 1;
				} else {
					comparacaoString(valor1, valor2, i+1, 1);
					aux = 1;
				}
				
			} else {
				if(retornoAnterior == 1) {
					comparacaoString(valor1, valor2, i+1, 1);
					aux = 2;
				} else {
					comparacaoString(valor1, valor2, i+1, 1);
					aux = 2;
				}
			}
		}
		
		
		
		return aux;
	}
	
	public static void selectionSort(String textos[], int array_size) {
		
		int i, j;
		int min;
		String temp;
	
		for (i = 0; i &lt array_size-1; i++) {
		
			min = i;
		
			for (j = i+1; j &lt array_size; j++) {
				if(comparacaoString(textos[j], textos[min], 0, 0) == 1) {
					min = j;
				}
			}
			
			temp = textos[i];
			textos[i] = textos[min];
			textos[min] = temp;
		}
	}

}