Como ordenar em ordem inversa

6 respostas
W
Olá de qual maneira eu posso fazer para que o codigo abaixo seja ordenado de forma decrescente?
public class OrdenacaoDecrescente {
	public static int[] insertionSort(int[] array) 
    {
		int[] resultado = array;
           for (int i = 1; i < array.length; i++) 
           {
                   int a = array[i];
                   int j;
                   for (j = i - 1; j >= 0 && array[j] > a; j--)
                   {
                           resultado[j + 1] = array[j];
                           resultado[j] = a;
                   }
           }
           return resultado;
   }
	
	public static int[] bubbleSort(int vetor[]) {
		 
		int[] resultado = vetor;
        for (int i = vetor.length; i >= 1; i--) {
            for (int j = 1; j < i; j++) {
                if (resultado[j - 1] > vetor[j]) {
                    int aux = vetor[j];
                    resultado[j] = vetor[j - 1];
                    resultado[j - 1] = aux;
                }
            }
        }
        return resultado;
    }
	
	public static int[] quickSort(int[] vetor, int ini, int fim) {
		int meio;
		int[] resultado=vetor;
		if (ini < fim) {
			meio = partition(vetor, ini, fim);
			resultado = quickSort(resultado, ini, meio);
			resultado = quickSort(resultado, meio + 1, fim);

		}
		return resultado;
	}

	public static int partition(int[] vetor, int ini, int fim) {
		int pivo, topo, i;
		pivo = vetor[ini];
		topo = ini;
		for (i = ini + 1; i < fim; i++) {
			if (vetor[i] < pivo) {
				vetor[topo] = vetor[i];
				vetor[i] = vetor[topo + 1];
				topo++;
			}
		}
		vetor[topo] = pivo;
		return topo;
	}
	
		public static void escreve(int[] lista){
		for(int i=0;i<lista.length;i++){
			System.out.print(lista[i]+",");
		}
		System.out.println("\n");
	}
	
	public static void main(String args[]){
		int[] vetor = {10,2,7,9,1,6,3,4,8,5};
		escreve(vetor);
		int[] vetorOrdIns = insertionSort(vetor);
		escreve(vetorOrdIns);
		int[] vetorOrdBub = bubbleSort(vetor);
		escreve(vetorOrdBub);
		int[] vetorOrdQui = quickSort(vetor,0,vetor.length);
		escreve(vetorOrdQui);
	}
}

6 Respostas

HelberChoo
Para fazer isso tens de trocar os sinais das decisões!.. Assim:
public static int[] insertionSort(int[] array)
        {
            int[] resultado = array;
               for (int i = 1; i < array.length; i++)
               {
                       int a = array[i];
                       int j;
                       for (j = i - 1; j >= 0 && array[j] < a; j--)
                       {
                               resultado[j + 1] = array[j];
                               resultado[j] = a;
                       }
               }
               return resultado;
       }

        public static int[] bubbleSort(int vetor[]) {

            int[] resultado = vetor;
            for (int i = vetor.length; i >= 1; i--) {
                for (int j = 1; j < i; j++) {
                    if (resultado[j - 1] < vetor[j]) {
                        int aux = vetor[j];
                        resultado[j] = vetor[j - 1];
                        resultado[j - 1] = aux;
                    }
                }
            }
            return resultado;
        }

        public static int[] quickSort(int[] vetor, int ini, int fim) {
            int meio;
            int[] resultado=vetor;
            if (ini > fim) {
                meio = partition(vetor, ini, fim);
                resultado = quickSort(resultado, ini, meio);
                resultado = quickSort(resultado, meio + 1, fim);

            }
            return resultado;
        }
W

Obrigadão amigo, numca pensei que fosse só isso.

W
public class OrdenacaoDecrescente {
	public static int[] insertionSort(int[] array) 
    {
		int[] resultado = array;
           for (int i = 1; i < array.length; i++) 
           {
                   int a = array[i];
                   int j;
                   for (j = i - 1; j >= 0 && array[j] > a; j--)
                   {
                           resultado[j + 1] = array[j];
                           resultado[j] = a;
                   }
           }
           return resultado;
   }
	
	public static int[] bubbleSort(int vetor[]) {
		 
		int[] resultado = vetor;
        for (int i = vetor.length; i >= 1; i--) {
            for (int j = 1; j < i; j++) {
                if (resultado[j - 1] > vetor[j]) {
                    int aux = vetor[j];
                    resultado[j] = vetor[j - 1];
                    resultado[j - 1] = aux;
                }
            }
        }
        return resultado;
    }
	
	public static int[] quickSort(int[] vetor, int ini, int fim) {
		int meio;
		int[] resultado=vetor;
		if (ini < fim) {
			meio = partition(vetor, ini, fim);
			resultado = quickSort(resultado, ini, meio);
			resultado = quickSort(resultado, meio + 1, fim);

		}
		return resultado;
	}

	public static int partition(int[] vetor, int ini, int fim) {
		int pivo, topo, i;
		pivo = vetor[ini];
		topo = ini;
		for (i = ini + 1; i < fim; i++) {
			if (vetor[i] < pivo) {
				vetor[topo] = vetor[i];
				vetor[i] = vetor[topo + 1];
				topo++;
			}
		}
		vetor[topo] = pivo;
		return topo;
	}
	
		public static void escreve(int[] lista){
		for(int i=0;i<lista.length;i++){
			System.out.print(lista[i]+",");
		}
		System.out.println("\n");
	}
	
	public static void main(String args[]){
		int[] vetor = {10,2,7,9,1,6,3,4,8,5};
		escreve(vetor);
		int[] vetorOrdIns = insertionSort(vetor);
		escreve(vetorOrdIns);
		int[] vetorOrdBub = bubbleSort(vetor);
		escreve(vetorOrdBub);
		int[] vetorOrdQui = quickSort(vetor,0,vetor.length);
		escreve(vetorOrdQui);
	}
}
Por que ao alterar a linha 9
for (j = i - 1; j >= 0 && array[j] > a; j--)
para
for (j = i; j >= 0 && array[j] >= a; j--)
o programa compila, mas não executa?
JM4X

primeira iteração:
i = 1
j = 0
logo nunca entra no for interno.

;p

W

obrigado ae pela resposta, não tava compreendendo a lógica.

HelberChoo

Isso é um erro interessante
O que aconteceu é que estas a iniciar o ciclo interno com:
j = i
Contudo no ciclo esterno i ira percorrer de 1 ate antes do tamanho do array
mas no ciclo interno j ira percorrer de 1 ate o tamanho do array

Ou seja: Seja o array a com 6 elementos
No ciclo esterno i ira percorrer de 1 ate 5
no ciclo interno j ira percorrer de 1 ate 6, mas não existe elemento 6 pois o array tem 6 elementos e inicia-se a contagem do 0

Criado 18 de agosto de 2011
Ultima resposta 20 de ago. de 2011
Respostas 6
Participantes 3