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);
}
}
Como ordenar em ordem inversa
W
Olá
de qual maneira eu posso fazer para que o codigo abaixo seja ordenado de forma decrescente?
6 Respostas
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);
}
}
for (j = i - 1; j >= 0 && array[j] > a; j--)
for (j = i; j >= 0 && array[j] >= a; j--)
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.
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
Alura POO: o que é programação orientada a objetos? Aprenda os conceitos básicos da programação orientada a objetos, como classes, objetos, herança, encapsulamento e polimorfismo, com exemplos.
Casa do Codigo Inteligencia Artificial e ChatGPT: Da revolucao dos... Por Fabricio Carraro — Casa do Codigo