Упорядочить элементы массива в порядке частоты встречаемости чисел - 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д