Guarda, prova questo.
Studiai questo algoritmo diversi mesi fa e ora l'ho implementato di nuovo prendendolo da certi appunti... ho fatto diverse prove e dovrebbe funzionare.
In sostanza, anziché considerare singolarmente gli elementi dell'array, li considera a coppie, e nel complesso esegue 3n/2 confronti, questo perché il ciclo for ha uno step pari a 2, non 1, quindi se n è il numero delle componenti le iterazioni sono n/2 e, per ognuna di queste, vengono eseguiti 3 confronti, né più né meno. Quindi n/2 iterazioni con 3 confronti... T(n) = 3n/2, mentre invece con quello che proponevi tu facevi due confronti per ogni componente dell'array tranne la prima, quindi 2n - 2.
(Edit: comunque per quanto riguarda il codice del post precedente non so se va bene ma comunque l'errore è che l'ultima parentesi graffa chiude il for, non il main, quindi ne devi aggiungere un'altra)
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
short i;
void calcolo_min_max_media(int *x, short n, int *min, int *max, int *media) {
*min = *max = *media = x[0];
for (i=1; i<n-1; i+=2) {
if ( x[i] > x[i+1] ) {
if ( x[i] > *max )
*max = x[i];
if ( x[i+1] < *min )
*min = x[i+1];
}
else {
if ( x[i] < *min )
*min = x[i];
if ( x[i+1] > *max )
*max = x[i+1];
}
*media += x[i] + x[i+1];
}
*media /= n;
}
int main(void) {
int *array, min, max, media;
short n;
printf("Immettere il numero delle componenti dell'array: ");
scanf("%hd%*c", &n);
array = (int *)malloc( n*sizeof(int) );
srand( (unsigned int)time(NULL) );
printf("\nGenerazione e visualizzazione degli elementi dell'array:\n\n");
for (i=0; i<n; i++) {
array[i] = rand();
printf("%-6d", array[i]);
}
puts("\n");
calcolo_min_max_media (array, n, &min, &max, &media);
printf("Il minimo elemento dell'array e': %d\n"
"Il massimo elemento dell'array e': %d\n"
"La media degli elementi dell'array e': %d\n", min, max, media);
getchar();
return 0;
}