#include <stdio.h>
#include <stdlib.h>
#define MAX_NUMBER_SIZE 50 + 1
int CompareDescending(const void* a, const void* b) {
return (*(int*)b - *(int*)a);
}
void PrintKMostFrequentNumbers(int arr[], int len, int K) {
int frequency[MAX_NUMBER_SIZE] = { 0 };
int equivalent_number[MAX_NUMBER_SIZE] = { 0 };
for (int i = 0; i < len; i++) {
frequency[arr[i]]++;
}
for (int i = 0; i < MAX_NUMBER_SIZE; i++) {
equivalent_number[frequency[i]] = i;
}
qsort(frequency, MAX_NUMBER_SIZE, sizeof(int), CompareDescending);
for (int i = 0; i < K; i++) {
printf("%d ", equivalent_number[frequency[i]]);
}
}
int main()
{
// up to 50, at this time
int arr[] = { 4, 5, 19, 30, 7, 19, 8, 19, 3, 5, 6, 19, 27, 19, 3, 5, 5 };
int len = sizeof(arr) / sizeof(arr[0]);
int K = 2;
PrintKMostFrequentNumbers(arr, len, K);
return 0;
}
/*
run:
19 5
*/