Сортировка массива букв по частоте - PullRequest
0 голосов
/ 25 ноября 2018

Я пишу программу, которая подсчитывает частоту букв файла для последующего использования для декодирования другого файла.Я могу правильно отсортировать массив по значениям (вызов метода, который я закомментировал), но не могу понять, как сортировать соответствующие буквы со значениями.Любая помощь будет принята с благодарностью.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

class CodeBreakerProject {

    public static void swap(int[] count, int index1, int index2) {
        int temp = count[index1];
        count[index1] = count[index2];
        count[index2] = temp;
    }

    public static void selectionSort(int[] count) {
        for (int i = 0; i < count.length; i++) {
            // find smallest element from i to end
            int minIndex = i; // assume 1st element is smallest
            for (int j = i; j < count.length; j++) {
                if (count[j] > count[minIndex]) {
                    minIndex = j;
                }
            }
            swap(count, i, minIndex);
        }
    }

    public static void main(String[] args) throws IOException {
        File file1 = new File("training.txt");
        BufferedReader in = new BufferedReader(new FileReader(file1));
        System.out.println("Letter Frequency");

        int nextChar;
        char ch;

        int[] count = new int[26];

        while ((nextChar = in.read()) != -1) {
            ch = ((char) nextChar);
            if (ch >= 'a' && ch <= 'z') { count[ch - 'a']++; }
        }

        //selectionSort(count); this sorts the values but does not move the letter assignments

        for (int i = 0; i < 26; i++) {
            System.out.printf("%c = %d\n", i + 'A', count[i]);

        }

        in.close();
    }
}

1 Ответ

0 голосов
/ 25 ноября 2018

Если я понимаю вашу конечную цель, я не думаю, что вам нужно сортировать массив, который у вас есть.Первое, что вы должны переосмыслить это.Вам действительно нужно отсортировать массив, который у вас есть, по частотам символов, которые есть в вашем учебном тексте?

Ваш тренировочный массив, опять же, если я правильно понимаю, похож на что-то вроде этого:

int[] training = new int[5];

training[0] = 1; // a
training[1] = 2; // b
training[2] = 3; // c
training[3] = 2; // d
training[4] = 8; // e

Теперь, в вашем целевом файле, вы снова соберете такой массив, но на этот раз,например, индекс 0 будет иметь наибольшее число, например:

// target array:
// [8, 2, 2, 3, 1]

Теперь все, что вам нужно сделать, это заменить все символы a на e в вашем целевом файле.(поскольку вы узнали, увидев, что он имеет самую высокую частоту, и в вашей тренировке самой высокой частотой была буква e).

Зачем вам даже нужно сортировать массив тренировок?

Если я вас неправильно понимаю, возможно, используйте Map для хранения ваших значений частоты и найдите любую функциональность, которая может вам понадобиться в этом классе:

Map<Character, Integer> characterFrequency = new HashMap<>();
characterFrequency.put('a', 4);
characterFrequency.put('b', 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...