Упорядочить элементы массива в порядке частоты встречаемости чисел - 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;
- }
Объяснение кода листинга программы
- Объявлены функции main и sortByFreq, а также переменные Arr, n, t, f, i, j, k, p.
- В функции main инициализируется массив A размером 11 элементов с числами 1, 2, 3, 1, 2, 2, 5, 3, 1, 3, 3.
- В функции main выводится на экран содержимое массива A.
- В функции sortByFreq инициализируются дополнительные переменные t и f для работы с частотами.
- В цикле строится массив уникальных элементов t, начиная с индекса 0, используя массив Arr.
- В цикле считываются частоты встречаемости каждого уникального элемента из массива Arr в массив f.
- В цикле элементы массива t сортируются по частоте встречаемости в порядке убывания.
- В цикле элементы массива Arr заменяются на элементы массива t в соответствии с их частотой встречаемости.
- В функции main выводится на экран отсортированный массив Arr.
- В функции main завершающая операция system(
PAUSE
) приостанавливает выполнение программы до нажатия клавиши. - Функция main возвращает 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д