Member 13161029 Ответов: 1

Распределение частот в массиве в C


Это относится к языку Си

У меня есть массив, и я отсортировал его в частотный массив. Пример:

не отсортировано = 1,2,1,1,4,2,2
сортировка = 1,1,1,2,2,2,4

Желаемая функциональность: печать наиболее частого номера. Пример:

Выход: 1,2

Проблема в том, что мне нужен эффективный способ вывода наиболее частого числа, и я это сделал (взятие sorted[0] дает мне наиболее частое число). Однако я не могу написать эффективный код для вывода наиболее частого числа, если у меня есть более одного числа с одинаковой частотой. Я хочу иметь возможность выводить (в числовом порядке)наиболее частое число, но если есть более одного с одинаковой частотой, выводите и их.

Что я уже пробовал:

int main()
{
 int unsorted[10] = {2,2,1,1,4,5,6,7,8,9};
 int bucket[10][5],buck[10],b[10];
 int i,j,k,l, n, counter, num,div,large,passes;
 n = 10;
 int arr[n];
 for (i=0; i<n; i++){
    arr[i] = unsorted[i];
 }

 div=1;
 num=0;
 large=arr[0];

 for(i=0 ; i<n ; i++)
 {
  if(arr[i] > large)
   {
    large = arr[i];
   }

  while(large > 0)
  {
   num++;
   large = large/10;
  }

  for(passes=0 ; passes<num ; passes++)
  {
   for(k=0 ; k<10 ; k++)
   {
    buck[k] = 0;
   }
   for(i=0 ; i<n  ;i++)
   {
    l = ((arr[i]/div)%10);
    bucket[l][buck[l]++] = arr[i];
   }

   i=0;
   for(k=0 ; k<10 ; k++)
   {
    for(j=0 ; j<buck[k] ; j++)
    {
     arr[i++] = bucket[k][j];
    }
   }
   div*=10;
  }
 }

printf("%d", arr[0]);
}

1 Ответов

Рейтинг:
0

OriginalGriff

Поскольку вы отсортировали их по частотному порядку, один проход через выход будет делать то, что вы хотите.
Первый элемент является наиболее частым: добавьте его к выходу и подсчитайте их. Это легко-петляй, пока не найдешь что-то другое! Когда у вас есть что-то другое, вы знаете, что это второе по частоте. Поэтому используйте второй цикл для их подсчета. Если число то же самое, добавьте его к выходу, установите значение "совпадение" на новое значение и подсчитайте их.
Когда число отличается, вы выводите все значения с одинаковой частотой.

Но это пахнет домашним заданием, так что я не дам вам никакого кода!

И, честно говоря, я бы этого не сделал: потому что для того, чтобы создать список "отсортированных по частоте", в первую очередь вы должны были подсчитать каждое значение, я бы использовал эту информацию во время сортировки (или, скорее всего, вместо сортировки), чтобы дать вам нужные числа.