Упорядочить элементы массива в порядке частоты встречаемости чисел - C (СИ)

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Упорядочить элементы массива в порядке частоты встречаемости чисел»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4.  
  5. void sortByFreq(int *Arr, int n)
  6. {
  7.     int i,j,k,p;
  8.     int *t;
  9.     int *f;
  10.  
  11.     t=(int *) calloc(n,sizeof(int));
  12.     f=(int *) calloc(n,sizeof(int));
  13.  
  14.     // Строим массив уникальных
  15.  
  16.     p=-1;
  17.     for (i=0; i<n; i++)
  18.     {
  19.          k=0;
  20.          for (j=0; j<p; j++)
  21.              if (t[j]==Arr[i])
  22.                 {
  23.                    k=-1;
  24.                    break;
  25.                 }
  26.          if (k==0) t[++p]=Arr[i];  
  27.     }
  28.                
  29.     // Считаем частоты уникальных
  30.  
  31.    for (i=0; i<=p; i++)
  32.    {
  33.         k=t[i];
  34.         for (j=0; j<n; j++) if (k==Arr[j]) f[i]++;
  35.    }
  36.  
  37.    // Сортируем по частотам
  38.  
  39.    for (i=0; i<p; i++)
  40.        for (j=i+1; j<=p; j++)
  41.            if (f[j]<f[i])
  42.              {
  43.                  k=f[j]; f[j]=f[i]; f[i]=k;
  44.                  k=t[j]; t[j]=t[i]; t[i]=k;
  45.              }
  46.  
  47.    // Реорганизуем исходный массив
  48.  
  49.    k=0;
  50.    for (i=0; i<=p; i++)
  51.         for (j=0; j<f[i]; j++) Arr[k++]=t[i];
  52.  
  53.    // Освобождаем динамическую память
  54.  
  55.    free(t);
  56.    free(f);
  57.  
  58. }
  59.  
  60. int main(int argc, char *argv[])
  61. {
  62.  
  63.   int A[]={1,2,3,1,2,2,5,3,1,3,3};
  64.   int i;
  65.  
  66.   for (i=0; i<sizeof(A)/sizeof(int); i++)
  67.    printf("%d ",A[i]);
  68.    
  69.   printf("\n\n");
  70.  
  71.   sortByFreq(A,sizeof(A)/sizeof(int));
  72.  
  73.   for (i=0; i<sizeof(A)/sizeof(int); i++)
  74.    printf("%d ",A[i]);
  75.    
  76.   printf("\n\n");
  77.  
  78.   system("PAUSE"); 
  79.   return 0;
  80. }

Объяснение кода листинга программы

  1. Объявлены функции main и sortByFreq, а также переменные Arr, n, t, f, i, j, k, p.
  2. В функции main инициализируется массив A размером 11 элементов с числами 1, 2, 3, 1, 2, 2, 5, 3, 1, 3, 3.
  3. В функции main выводится на экран содержимое массива A.
  4. В функции sortByFreq инициализируются дополнительные переменные t и f для работы с частотами.
  5. В цикле строится массив уникальных элементов t, начиная с индекса 0, используя массив Arr.
  6. В цикле считываются частоты встречаемости каждого уникального элемента из массива Arr в массив f.
  7. В цикле элементы массива t сортируются по частоте встречаемости в порядке убывания.
  8. В цикле элементы массива Arr заменяются на элементы массива t в соответствии с их частотой встречаемости.
  9. В функции main выводится на экран отсортированный массив Arr.
  10. В функции main завершающая операция system(PAUSE) приостанавливает выполнение программы до нажатия клавиши.
  11. Функция main возвращает 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы