Ecco una soluzione che non usa nessun array aggiuntivo, così siamo tutti più contenti:
codice:
#include <stdlib.h>
int getFashion(int * inarray, int elements);
int compFunction(const void * elem1, const void * elem2);
void main()
{
     int intarray[]={16, 51, 84, 83, 15, 15, 15, 15, 15, 10, 84};
     printf("%d",getFashion(intarray,sizeof(intarray)/sizeof(int)));
     getch();
     return;
}
int getFashion(int * inarray, int elements)
{
     int pivotelem=0;
     int pivotoccur=1;
     int curoccur=1;
     int c;
     qsort(inarray, elements, sizeof(int), compFunction);
     pivotelem=inarray[0];
     for(c=1; c<elements; c++)
     {
             if(inarray[c]==inarray[c-1])
                 curoccur++;
             else
             {
                 if(curoccur>pivotoccur)
                 {
                     pivotoccur=curoccur;
                     pivotelem=inarray[c-1];
                 }
                 curoccur=1;
             }                        
     }
     if(curoccur>pivotoccur)
     {
          pivotoccur=curoccur;
          pivotelem=inarray[c-1];
     }
     return pivotelem;
}
int compFunction(const void * elem1, const void * elem2)
{
    int int1=*((int *)elem1);
    int int2=*((int *)elem2);
    if (int1>int2) return 1;
    else if (int2>int1) return -1;
    else return 0;
}
L'algoritmo che ho scritto in primo luogo ordina l'array (richiamando qsort), così da compattare i valori in blocchi omogenei; quindi scorre l'array individuando il salto da un blocco all'altro, contando di quanti elementi consta ciascun blocco e confrontando tale valore con le occorrenze dell'elemento "pivot" (quello che, fino a questo momento, aveva il numero maggiore di occorrenze). Se l'ultimo blocco ha più occorrenze del pivot allora diventa il nuovo pivot; dopo aver scorso tutto l'array viene restituito il pivot.