В вашем коде есть небольшая ошибка.
- В вашем массиве есть число "total_number", поэтому вашему циклу нужно перейти от 0 до total_number - 1.
- Вы забыли обновить freq_amt, когда у вас есть новое число максимальных частот.
После, несколько советов по стилю кодирования: при циклическом выполнении массива используйте цикл for с внутренним объявлением итератора.Переменная loop_fre_num бесполезна.
int most_freq(int num_array[], size_t total_numbers)
{
int freq_num = 0;
int freq_amt = 0;
for (size_t i = 0; i < total_numbers; ++i) {
int loop_freq_amt = 0;
for (size_t j = 0; j < total_numbers; ++j) {
if (num_array[i] == num_array[j]) {
++loop_freq_amt;
}
}
if(loop_freq_amt > freq_amt) {
freq_num = num_array[i];
freq_amt = loop_freq_amt;
}
}
return freq_num;
}
По поводу «скопировать, отсортировать и найти самую длинную последовательность», вот реализация:
int qsort_comp_int(const void *elem1, const void *elem2)
{
return (*(int *)(elem1) - *(int *)(elem2));
}
int most_freq(int num_array[], size_t total_numbers)
{
int *copy = NULL;
size_t copyByteSize = sizeof(*copy) * total_numbers;
int freq_num = num_array[0];
int freq_max_amt = 0;
int freq_current_amt = 0;
copy = malloc(copyByteSize);
memcpy(copy, num_array, copyByteSize);
qsort(copy, total_numbers, sizeof(*copy), qsort_comp_int);
for (size_t i = 0; i < total_numbers; ++i) {
if (i != 0 && copy[i] != copy[i - 1]) {
if (freq_max_amt < freq_current_amt) {
freq_num = copy[i - 1];
freq_max_amt = freq_current_amt;
}
freq_current_amt = 0;
} else {
++freq_current_amt;
}
}
free(copy);
return (freq_num);
}
int main (void)
{
int array[] = {1, 2, 3, 4, 1, 1, 1, 0, 4, 10, 3};
printf("'%d'\n", most_freq(array, sizeof(array)/sizeof(*array)));
}