Распределение частот в массиве в 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]); }