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

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

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

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

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

textual
Листинг программы
#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. Объявлены функции 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
Похожие ответы