Lascio anche una possibile implementazione (senza ordinamento) che ho scritto al volo. Non è molto ottimizzata ma sembra che funzioni:
#include <stdio.h>
#include <stdlib.h>
void stampa_vettore(int* vettore, int dim)
{
int i;
printf("\n");
for(i=0; i<dim; i++)
{
printf("%d ", vettore[i]);
}
printf("\n\n");
}
int valore_max_ripetizioni(int* vettore, int dim)
{
int i, j, count=1, count_max=0, val_max;
for(i=0; i<dim; i++)
{
for(j=i+1; j<dim; j++)
{
if((vettore[j] != -1) && (vettore[j] == vettore[i]))
{
/* incremento il contatore relativo a questo elemento */
count++;
/* segno che l'ho gia' considerato */
vettore[j] = -1;
}
}
if(vettore[i] != -1)
{
printf("%d ripetizioni di %d\n", count, vettore[i]);
}
/* se questo elemento e' (per ora) quello che si ripete piu' volte */
if(count > count_max)
{
count_max = count;
val_max = vettore[i];
}
/* resetto il contatore */
count = 1;
}
return val_max;
}
int main()
{
int vettore[]={1, 2, 1, 2, 3, 1, 4};
int piu_ripetuto;
stampa_vettore(vettore, 7);
piu_ripetuto = valore_max_ripetizioni(vettore, 7);
printf("\nIl valore piu' ripetuto e' %d.\n", piu_ripetuto);
return 0;
}
L'inconveniente è che il vettore viene "distrutto", nel senso che il suo contenuto viene alterato. Però il codice si può ovviamente modificare in modo che le operazioni vengano fatte su una copia del vettore e non sull'originale.