Ordenação decrescente através do metodo Bubblesort em um arquivo .txt

Boa noite pessoal, tenho um trabalho que eu preciso fazer 2 tipos de ordenação

  • a primeira eu fiz pelo collection.sort(se puderem me falar qual o tipo dessa ordenação agradeceria)
  • o segundo estava pensando em fazer pelo BubbleSort(mas pode ser outro, so tem que ser difenrente da ordenaçao do Collection) na ordem Decrescente em um arquivo txt
    Agradeço desde já a ajuda!

No caso vc quis dizer que ordenou usando o método Collections.sort(), correto?

Se for isso, considerando o Java 17, este método internamente invoca o método List.sort() como é descrito na documentação e como podemos ver no código fonte.

E olhando a descrição do método List.sort() vemos que se trata de um mergesort.

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html#sort(java.util.Comparator)

No caso do arquivo que vc tem que ordenar, seria por palavras? Se for, daria para fazer assim:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;

public class Main {
  public static void main(String... args) {
    try {
      Path path = Paths.get("words.txt");

      String[] words = new String(Files.readAllBytes(path)).split("[,\\s]+");

      // Ou no Java 11 ou superior
      // String[] words = Files.readString(path).split("[,\\s]+");

      System.out.println(Arrays.toString(words));

      bubbleSort(words);

      Files.write(path, String.join(", ", words).getBytes());

      // Ou no Java 11 ou superior
      // Files.writeString(path, String.join(", ", words));
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private static void bubbleSort(String[] words) {
    // Insira sua implementação de Bubble Sort aqui
  }
}

Primeiramente muito obrigado por falar a primeira questão,
já na parte da ordenação, eu tenho o dados(numericos)+ a data, eu queria ordenar pelos dados, e cada dado estaria em uma linha no arquivo txt

É que vc está sendo muito superficial.

Nos dê exemplos de código, exemplos de como é de verdade este TXT, mostra o código que vc já tem.

é que eu não consigo colar o codigo pq tem +300 linhas, mas ele deve adicionar dados, abrir o arquivo txt, remover dado e ordenar decrescente e crescente o arquivo. Já consegui fazer tudo(acredito que até na prte crescente voce me ajudou), menos ordenar decrescente, vou colar aqui como eu esta a parte de ordenação crescente

/code

btnNewButton = new JButton(“Crescente”);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
String str;
ArrayList nomes = new ArrayList();

	   BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\sique\\OneDrive\\Documentos\\facul 4o\\aps\\entrada.txt"));

	        while ((str = in.readLine()) != null) {
	            nomes.add(str);
	        }
	        in.close();

	        Collections.sort(nomes);

	        BufferedWriter out = new BufferedWriter(new FileWriter("C:\\Users\\sique\\OneDrive\\Documentos\\facul 4o\\aps\\entrada.txt"));
	        for (int i = 0; i < nomes.size(); i++) {
	            out.write(nomes.get(i));
	            out.newLine();
	        }
	        out.close();
			}catch(IOException ex) {
				
				JOptionPane.showMessageDialog(null, "erro em salvar" + ex.getMessage());
			}
	       
	    }
	});

/code

Experimentar usar o Comparator.reverseOrder(). Assim:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {
  public static void main(String... args) {
    List<String> nomes = new ArrayList<>(List.of("b", "d", "a", "c"));

    Collections.sort(nomes, Comparator.reverseOrder());

    System.out.println(nomes);
  }
}

o problema é que eu não posso repetir o mesmo metodo de ordenação, eu tenho usar só 2 tipos de ordenação, como já usei o Collection.sort(), eu não poderia repeti-lo e nem outro que teria o mesmo metodo de ordenação, por isso perguntei qual que era o tipo de ordenação do collection.sort()

Segue abaixo os metodos que eles pedem:
Ordenação por troca; Ordenação por inserção;Ordenação por seleção;Método da intercalação ou outro.

Eu pesquisei aqui e achei esta implementação do bubble sort:

Eu modifiquei para funcionar com String, olha só:

import java.util.Arrays;

public class Main {
  private static void bubbleSort(String[] arr) {
    int length = arr.length;

    for (int i = 0; i < length - 1; i++) {
      for (int j = 0; j < length - i - 1; j++) {
        // if (arr[j].compareTo(arr[j + 1]) > 0) // assim seria crescente
        if (arr[j].compareTo(arr[j + 1]) < 0) { // Decrescente
          String temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp;
        }
      }
    }
  }

  public static void main(String... args) {
    String[] nomes = { "b", "d", "a", "c" };

    bubbleSort(nomes);

    System.out.println(Arrays.toString(nomes));
  }
}

Se vai ser crescente ou decrescente é aquele if que diz. Vc compara com < 0 ou > 0 dependendo o que vc quer.

1 curtida

eu tenho esse codigo para ler o arquivo txt, como que eu poderia coloca-lo dentro dessa formula do bubblesort

/code
JButton btnDecrescente = new JButton(“Decrescente”);
btnDecrescente.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

			try {
				String str;
		        ArrayList<String> nomes = new ArrayList<String>();
		        

		        BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\sique\\OneDrive\\Documentos\\facul 4o\\aps\\entrada.txt"));

		        while ((str = in.readLine()) != null) {
		            nomes.add(str);
		        }
		        in.close();

/code

Abaixo do in.close(), vc poderia adicionar o seguinte:

String[] arrayNames = nomes.toArray(String[]::new);
bubbleSort(arrayNames);
System.out.println(Arrays.toString(arrayNames));
Files.write(Paths.get("saida.txt"), Arrays.asList(arrayNames));
1 curtida