/**** 1) trovare un numero di elementi del vettore per cui la bubblesort() ci mette circa 10 secondi (circa ...... elementi) 2) codificare e controllare che funziona bubblesort2() 3) lanciare bubblesort2() con il numero di elementi nel vettore trovato al punto 1) e verificare se il tempo e' minore o maggiore di 10 secondi ****/ /*** prova di Sorice: 100 mila elementi bubblesort() ----> circa 50 secondi bubblesort2()----> circa 30 secondi == piu' veloce di circa 40% selectsort() ----> dovrebbe essere piu' veloce, limitando gli scambi a N-1 circa fra 12 e 15 secondi per 100 mila elementi occorre una funzione richiamata N-1 volte, se N e' il numero di elementi che ritorni la posizione dell'elemento minimo fra x e N con x crescente (x==0 al primo giro, x == 1 secondo giro, ... x == N-2 ultimo giro eccola: (vedi sotto pminimo() ) insertsort() ----> occorre una funzione che, detta x la posizione in cui inserire un elemento, faccia il buco nel vettore in posizione x spostando gli y elementi a destra.. e' un po' difficile da scrivere... void insertsort(int a[], int nelem) { int temp,i,j; for (i = 1; i < nelem; i++) { temp = a[i]; j = i - 1; while (j >= 0 && a[j] > temp) { a[j + 1] = a[j]; j--; } a[j + 1] = temp; } } void selectsort(int v[], int nelem) { int i,pm; for(i=0; i < nelem-1; i++) { pm=pminimo(v,i,nelem); scambia(v,i,pm); } } int pminimo(int v[], int x, int nelem) { int pm=x; /// parto da v[x] e cerco il minimo int i; for (i=x; i < nelem; i++) if (v[i] < v[pm]) pm=i; return pm; } void bubblesort2(int v[], int nelem) { int i,j; for(i=0; i < nelem-1; i++) // ciclo fino al penultimo for(j=i+1 ; j < nelem; j++) // ciclo interno if ( v[i] > v[j] ) scambia(v,i,j); ///scambia i due elementi del vettore /// NON BASTA MAI UN UNICO CICLO per ordinare un vettore }