Programma con linguaggio c (III liceo)

paolo993
Potete aiutarmi a fare questo programma per favore?!
-Genera casualmente N numeri, scegli casualmente un elemento del vettore e quindi effettua la partizione dell'array rispetto a quell'elemento (cioè elabora il vettore in modo tale che tutti gli elementi a sinistra dell'elemento scelto siano minori o, al limite uguali, mentre tutti gli elementi a destra siano sempre maggiori).

Grazie mille!!!

Risposte
kobeilprofeta
premessa: ricorda di scrivere nel main srand(time(NULL)); e di includere

genera un numero intero casuale tra a e b compresi

Ora scegli il valore minimo (min), il valore massimo (max) da dare ai tuoi elementi dell'array. poi
for (i=0;i<N;i++) {a[i]=caso(min,max);}
int ind=caso(1,N);
//ind è la variabile che mi sceglie un indice a caso. a[ind] sarà il mio elemento base per la partizione

kobeilprofeta
ora vediamo di mettere a sinistra elementi minori e a destra quelli maggiori.

conto quanti elementi sono piú piccoli di a[ind], allora metteró esso in quella posizione
q=0
for(i=0;i<N;i++) {if((a[i]<=a[ind])&&(i!=ind)) {quanti_minori++;}}

creo un array d'appoggio b[N]
poi b[quanti_minori]=a[ind]

ora mettiamo a sinistra i piú piccoli
j=0
for (i=0;i<N;i++) {if((a[i]<=a[ind])&&(i!=ind)) {b[j]=a[i]; j++;}


mettiamo a destra i piú grandi
j=quanti_minori+1;
for (i=0;i<N;i++) {if((a[i]>a[ind])&&(i!=ind)) {b[j]=a[i]; j++;}

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.