I want to write an algorithm that finds the n-th most frequent number in an array. I have a solution but not optimal (testing numbers i've already tested) I wonder if there is a more optimal solution? Here is my Solution :
most_freq_element(a,n){
final_cnt = 0, curr_cnt = 1, final_freq_num = -1, curr_freq_num = -1;
for(i = 0; i < n-1; i++)
{
if (a[i]!=-1){
curr_freq_num = a[i];
for(j =i+1; j < n; j++){
if(curr_freq_num == a[j] && final_freq_num != curr_freq_num){
curr_cnt++;
}
}
if(final_cnt < curr_cnt){
final_cnt = curr_cnt;
curr_cnt = 1;
final_freq_num = curr_freq_num;
}
}
}
printf("Num = %d and times = %d", final_freq_num, final_cnt);
}
nth_most_frequent_element(a,n,k){
if(k==1){
return most_freq_element(a,n);
}
else{
for (i=0;i<k;i++){
int most_freq_num = most_freq_element(a,n);
for(i = 0; i < n-1; i++){
if (a[i]==most_freq_num){
a[i]=-1;
}
}
}
return most_freq_element(a,n);
}
}