С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 46
1

Вывести числа в порядке убывания частоты встречаемости чисел

22.03.2018, 18:20. Показов 4579. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Такое задание вывести числа в порядке убывания частоты встречаемости чисел. Я отсортировал массив по убыванию, теперь не знаю, что делать. Есть идея посчитать числа и количество их повторений и занести во второй массив, который потом отсортировать по колличеству, но не знаю как реализовать правильно. Можете, что то посоветовать.

Отсортированый массив по убыванию.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int mass[] = new int[]{32, 12, 32, 96, 88, 32};
        for (int i = mass.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (mass[j] < mass[j+1]) {
                    int tmp = mass[j];
                    mass[j] = mass[j+1];
                    mass[j+1] = tmp;
                }
            }
        }
        for (Integer m : mass){
            System.out.print(m + " ");
        }
        System.out.println();
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
22.03.2018, 18:20
Ответы с готовыми решениями:

Вывести на консоль числа в порядке убывания частоты встречаемости чисел
Задача просто ад для меня. Нашел словесное решение сделать 2 массива один с количеством сколько раз...

Расположить в массиве числа в порядке убывания частоты встречаемости чисел
У меня задание: Расположить в массиве числа в порядке убывания частоты встречаемости чисел. Как...

Отсортировать слова в порядке убывания частоты их встречаемости
Вообщем задача такова: Первый файл содержит текст, который под- лежит анализу(Анализ провел...

Числа входного потока в порядке увеличения частоты встречаемости вывести в файл
Написать программу, которая цифры встречающеюся во входной записи, в порядке увеличения частоты...

7
Эксперт PythonЭксперт Java
19509 / 11049 / 2931
Регистрация: 21.10.2017
Сообщений: 23,302
22.03.2018, 20:01 2
BananaSkill,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package ru.ismoke;
 
import java.util.*;
 
public class Main {
 
    public static void main(String[] args) {
        Integer[] mass = {32, 12, 32, 96, 96, 88, 88, 88, 88, 32};
        Map<Integer, Integer> map = new TreeMap<>();
 
        for (Integer item : mass) {
            map.put(item, Collections.frequency(Arrays.asList(mass), item));
        }
        
        map.entrySet().stream()
                .sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed())
                .map(Map.Entry::getKey)
                .forEach(System.out::println);
    }
}
Если нужно вывести вместе с количеством, закомментируй .map(Map.Entry::getKey)
0
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 46
22.03.2018, 20:47  [ТС] 3
Спасибо, но как можно без коллекций?
0
Эксперт PythonЭксперт Java
19509 / 11049 / 2931
Регистрация: 21.10.2017
Сообщений: 23,302
22.03.2018, 20:58 4
BananaSkill, вообще без коллекций?
Если просто вывести на экран в порядке убывания частоты, то можно, в принципе, изгальнуться...
0
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 46
22.03.2018, 21:44  [ТС] 5
Да, просто вывести в порядке убывания частоты.
0
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
26.03.2018, 11:50 6
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import java.util.Arrays;
 
public class Task005 {
    public static void main(String[] args) {
        int[] array = {32, 12, 32, 96, 96, 88, 88, 88, 88, 32};
        int[][] result = getDeepArray(array);
        result = sortDeepArrayReverse(result, 0);
        printRowDeepArray(result, 1);
    }
 
    public static int[][] getDeepArray(int[] array) {
        int[][] result = new int[0][0];
        if (array != null) {
            int length = array.length;
            result = new int[length][2];
            int count = 0;
            while (length > 0) {
                result[count][1] = array[0];
                array = removeNumberFromArray(array, array[0]);
                result[count][0] = length - array.length;
                length = array.length;
                count++;
            }
            result = Arrays.copyOf(result, count);
        }
        return result;
    }
 
    private static int[] removeNumberFromArray(int[] array, int number) {
        if (array != null) {
            int index = 0;
            int length = array.length;
            int frequency = 0;
            while (index < length) {
                if (array[index] == number) {
                    System.arraycopy(array, index + 1, array, index, length - (index + 1));
                    length--;
                    frequency++;
                } else {
                    index++;
                }
            }
            array = Arrays.copyOf(array, array.length - frequency);
        }
        return array;
    }
 
    public static int[][] sortDeepArrayReverse(int[][] deepArray, int row) {
        if (deepArray != null) {
            int length = deepArray.length;
            for (int i = length - 1; i > 0; i--) {
                for (int j = 0; j < i; j++) {
                    if (deepArray[j][row] < deepArray[j + 1][row]) {
                        int[] temp = deepArray[j];
                        deepArray[j] = deepArray[j + 1];
                        deepArray[j + 1] = temp;
                    }
                }
            }
        }
        return deepArray;
    }
 
    public static void printRowDeepArray(int[][] deepArray, int row) {
        if (deepArray != null) {
            int[] array = new int[deepArray.length];
            for (int index = 0; index < deepArray.length; index++) {
                array[index] = deepArray[index][row];
            }
            System.out.println(Arrays.toString(array));
        }
    }
}
0
2716 / 2028 / 503
Регистрация: 17.02.2014
Сообщений: 9,425
26.03.2018, 15:23 7
или так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class CyberFrequency {
    private static int [] arrNumbers = {1,2,2,3,3,3,4,4,4,4,0,0,0,};
    private static Integer [] unicNums = new Integer[arrNumbers.length];
    private static int [] frequency;
 
    private static boolean isUnicNum(final int checkNum) {
        for (Integer tmpNum : unicNums) {
            if (tmpNum == null)
                return true;
            if (checkNum == tmpNum)
                return false;
        }
        return true;
    }
 
    private static void fillUnicNumArr() {
        int indexUnicNum = 0;
        for (int numArr : arrNumbers) {
            if (isUnicNum(numArr))
                unicNums[indexUnicNum++] = numArr;
        }
    }
 
    private static void setLengthFreqArr() {
        int countNum = 0;
        for (Integer tmpNum : unicNums) {
            if (tmpNum != null)
                countNum++;
            else
                break;
        }
        frequency = new int[countNum];
    }
 
    private static void getFrequen() {
        for (int i = 0; i < frequency.length; i++) {
            int freqTmp = 0;
            for (int arrNum : arrNumbers) {
                if (unicNums[i] == arrNum)
                    freqTmp++;
            }
            frequency[i] = freqTmp;
        }
    }
 
    private static void printNumsAndFreq() {
        System.out.printf("%5s    %5s%n", "Число", "Частота");
        for (int i = 0; i < frequency.length; i++) {
            int maxFreq = Integer.MIN_VALUE;
            int indexMaxFreq = -1;
            for (int j = 0; j < frequency.length; j++) {
                if (frequency[j] >= maxFreq) {
                    maxFreq = frequency[j];
                    indexMaxFreq = j;
                }
            }
            System.out.printf("%-5d - %3d%n",unicNums[indexMaxFreq], frequency[indexMaxFreq]);
            frequency[indexMaxFreq] = 0;
        }
    }
 
    public static void main(String args []){
        fillUnicNumArr();
        setLengthFreqArr();
        getFrequen();
        printNumsAndFreq();
    }
 
}
0
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 46
26.03.2018, 19:25  [ТС] 8
Спасибо
0
26.03.2018, 19:25
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
26.03.2018, 19:25
Помогаю со студенческими работами здесь

Расположить элементы массива в порядке убывания частоты встречаемости элементов.
В массиве записаны целые числа от 1 до 10. Расположить элементы массива в порядке убывания частоты...

Вывести цифры в порядке увеличения частоты их встречаемости
На вход программе подается последовательность цифр, заканчивающаяся точкой (другие символы, кроме...

Упорядочить элементы массива в порядке частоты встречаемости чисел
Всем привет! Есть вопрос по задаче. как упорядочить элементы массива в порядке частоты...

Вывести цифры, встречающиеся в последовательности, в порядке увеличения частоты их встречаемости
На вход программе подается последовательность цифр, заканчивающаяся точкой (другие символы, кроме...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru