Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
артур147
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 5
1

Упорядочить элементы массива в порядке частоты встречаемости чисел

03.01.2016, 19:11. Просмотров 1219. Ответов 7
Метки нет (Все метки)

Всем привет!

Есть вопрос по задаче.

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

помогите плиз. Спасибо
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2016, 19:11
Ответы с готовыми решениями:

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

Упорядочить элементы одномерного массива расположенных на четных позициях в порядке возрастания методом пузырька
Упорядочить элементы одномерного массива расположенных на четных позициях в порядке возрастания....

Напечатать элементы массива, частота встречаемости которых минимальна
Нужна помощь с задачей: Задан массив m, элементами которого являются "длинные" целые числа....

Напечатать элементы массива в обратном порядке по 10 чисел в строке
Сформировать массив из 100 случайных чисел. Напечатать числа в обратном порядке по 10 чисел в...

В массиве из 10 целых чисел поменять в зеркальном порядке элементы массива
В массиве из 10 целых чисел поменять в зеркальном порядке элементы массива, стоящие левее...

7
Catstail
Модератор
24167 / 12154 / 2180
Регистрация: 12.02.2012
Сообщений: 19,743
04.01.2016, 15:57 2
Проверить не могу (нет под рукой компилятора):

C
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
void sortByFreq(int *Arr, int n)
{
    int i,j,k,p;
    int *t;
    int *f;
 
    t=(int *) calloc(n,sizeof(int));
    f=(int *) calloc(n,sizeof(int));
 
    // Строим массив уникальных
 
    p=-1;
    for (i=0; i<n; i++)
    {
         k=0;
         for (j=0; j<p; j++)
             if (t[j]==Arr[i]) 
                {
                   k=-1;
                   break;
                }
         if (k==0) t[++p]=Arr[i]  
    }
                
    // Считаем частоты уникальных
 
   for (i=0; i<=p; i++)
   {
        k=t[i];
        for (j=0; j<n; j++) if (k==Arr[j]) f[i]++;
   }
 
   // Сортируем по частотам
 
   for (i=0; i<p; i++)
       for (j=i+1; j<=p; j++)
           if (f[j]<f[i])
             {
                 k=f[j]; f[j]=f[i]; f[i]=k;
                 k=t[j]; t[j]=t[i]; t[i]=k;
             }
 
   // Реорганизуем исходный массив
 
   k=0;
   for (i=0; i<=p; i++)
        for (j=0; j<f[i]; j++) Arr[k++]=t[i];
 
   free(t);
   free(f);
 
}
1
кирилл8526
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 20
04.01.2016, 18:27 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for i := 1 to n do 
for j := 1 to n do 
if A[i]=A[j] and i <> j then B[i] := B[i]+1; 
for i := 1 to n do 
for j := i+1 to n-1 do 
if B[j]<B[i] then 
begin 
t := B[i]; 
B[i]:=B[j]; 
B[j]:=t; 
t := A[i]; 
A[i]:=A[j]; 
A[j]:=t; 
end;
вот на паскале. только начал изучать СИ
0
артур147
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 5
04.01.2016, 19:19  [ТС] 4
помогите разобраться. вообще не получается(
0
Catstail
Модератор
24167 / 12154 / 2180
Регистрация: 12.02.2012
Сообщений: 19,743
05.01.2016, 12:04 5
Цитата Сообщение от кирилл8526 Посмотреть сообщение
вот на паскале. только начал изучать СИ
- это фигня.
0
Catstail
Модератор
24167 / 12154 / 2180
Регистрация: 12.02.2012
Сообщений: 19,743
05.01.2016, 12:21 6
Лучший ответ Сообщение было отмечено артур147 как решение

Решение

Вот полный работающий код:

C
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
74
75
76
77
78
79
80
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
void sortByFreq(int *Arr, int n)
{
    int i,j,k,p;
    int *t;
    int *f;
 
    t=(int *) calloc(n,sizeof(int));
    f=(int *) calloc(n,sizeof(int));
 
    // Строим массив уникальных
  
    p=-1;
    for (i=0; i<n; i++)
    {
         k=0;
         for (j=0; j<p; j++)
             if (t[j]==Arr[i]) 
                {
                   k=-1;
                   break;
                }
         if (k==0) t[++p]=Arr[i];  
    }
                
    // Считаем частоты уникальных
 
   for (i=0; i<=p; i++)
   {
        k=t[i];
        for (j=0; j<n; j++) if (k==Arr[j]) f[i]++;
   }
 
   // Сортируем по частотам
 
   for (i=0; i<p; i++)
       for (j=i+1; j<=p; j++)
           if (f[j]<f[i])
             {
                 k=f[j]; f[j]=f[i]; f[i]=k;
                 k=t[j]; t[j]=t[i]; t[i]=k;
             }
 
   // Реорганизуем исходный массив
 
   k=0;
   for (i=0; i<=p; i++)
        for (j=0; j<f[i]; j++) Arr[k++]=t[i];
 
   // Освобождаем динамическую память
 
   free(t);
   free(f);
 
}
 
int main(int argc, char *argv[])
{
 
  int A[]={1,2,3,1,2,2,5,3,1,3,3};
  int i;
  
  for (i=0; i<sizeof(A)/sizeof(int); i++)
   printf("%d ",A[i]);
   
  printf("\n\n");
  
  sortByFreq(A,sizeof(A)/sizeof(int));
  
  for (i=0; i<sizeof(A)/sizeof(int); i++)
   printf("%d ",A[i]);
   
  printf("\n\n");
  
  system("PAUSE");  
  return 0;
}
1
Миниатюры
Упорядочить элементы массива в порядке частоты встречаемости чисел  
easybudda
Модератор
Эксперт CЭксперт С++
10211 / 6110 / 1536
Регистрация: 25.07.2009
Сообщений: 11,619
05.01.2016, 13:31 7
По убыванию частоты или значения
C
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define ELEMENTS_IN_ARRAY (20)
#define MIN_VALUE (0)
#define MAX_VALUE (9)
 
int count(const int * array, const size_t size, const int value) {
    return ( size ) ? ( *array == value ) + count(array + 1, size - 1, value) : 0;
}
 
void fill(int * array, size_t size, int min_val, int max_val) {
    while ( size-- )
        *array++ = rand() % ( max_val - min_val + 1 ) + min_val;
}
 
void dump(const int * array, size_t size) {
    while ( size-- )
        printf("%d ", *array++);
    printf("\n");
}
 
int arr[ELEMENTS_IN_ARRAY];
 
int cmp(const void * a, const void * b) {
    int dif = count(arr, ELEMENTS_IN_ARRAY, *(int*)b) - count(arr, ELEMENTS_IN_ARRAY, *(int*)a);
    return ( dif ) ? dif : *(int*)b - *(int*)a;
}
 
int main(void) {
    srand(time(NULL));
    
    fill(arr, ELEMENTS_IN_ARRAY, MIN_VALUE, MAX_VALUE);
    dump(arr, ELEMENTS_IN_ARRAY);
    qsort(arr, ELEMENTS_IN_ARRAY, sizeof(int), cmp);
    dump(arr, ELEMENTS_IN_ARRAY);
    
    return 0;
}
Код
~/cpp/numbers $ gcc sort_by_frequency.c 
~/cpp/numbers $ ./a.out 
9 4 3 0 7 3 7 1 5 7 9 9 5 3 9 2 5 5 6 1 
9 9 9 9 5 5 5 5 7 7 7 3 3 3 1 1 6 4 2 0 
~/cpp/numbers $ ./a.out 
7 9 1 0 5 9 9 2 3 7 0 5 6 8 6 6 3 7 0 0 
0 0 0 0 9 9 9 7 7 7 6 6 6 5 5 3 3 8 2 1 
~/cpp/numbers $ ./a.out 
5 1 6 3 6 6 5 1 5 2 8 6 0 9 7 2 1 3 5 1 
6 6 6 6 5 5 5 5 1 1 1 1 3 3 2 2 9 8 7 0 
~/cpp/numbers $
2
артур147
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 5
05.01.2016, 20:25  [ТС] 8
спасибо

Добавлено через 3 часа 30 минут
Catstail, зайдите пожалуйста в скайп. Есть вопрос к вам
0
05.01.2016, 20:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2016, 20:25

Вывести на экран различные элементы массива целых чисел в порядке возрастания их числа повторений
1. Вывести на экран различные элементы массива целых чисел в порядке возрастания их числа...

Упорядочить элементы массива в порядке возрастания частоты встречаемости
Дан одномерный массив. Упорядочить элементы массива в порядке возрастания частоты встречаемости....

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru