/****************************************************************************** BubbleSort: *******************************************************************************/ #include #define MAX 100 #define TEST_MODE 1 int n_elem; int nconfronti=0; int carica_vettore (int a[]) { int n, i; printf ("Quanti elementi?: "); scanf ("%d", &n); for (i = 0; i < n; i++) { printf ("elemento %d: ", i); scanf ("%d", &a[i]); } return (n); } void stampa_vettore (int a[], int p, int u) { int i; for (i = p; i <= u; i++) { printf ("%d ", a[i]); } printf ("\n"); return; } void scambia (int a[], int x, int y) { int copia; copia = a[x]; a[x] = a[y]; a[y] = copia; } int BubbleSort (int a[], int n) { int k, scambioeffettuato, ultimo; ultimo=n-2; do{ scambioeffettuato=0; for (k=0;k<=ultimo;k++){ nconfronti++; if (a[k]>a[k+1]){ scambia (a, k, k+1); scambioeffettuato=1; } } ultimo--; stampa_vettore (a, 0, n - 1); }while (scambioeffettuato==1); return ultimo; } int main () { int i, n_cicli; # if(TEST_MODE) int a[] = { 52, 25, 35, 53, 63, 36, 66, 48, 12, 12, 88, 84, 48, 78, 26}; n_elem = 15; #else int a[MAX]; n_elem = carica_vettore(a); #endif printf ("Vettore iniziale: \n"); stampa_vettore (a, 0, n_elem - 1); n_cicli=BubbleSort (a, n_elem); printf ("Vettore ordinato con Bubble sort: \n"); stampa_vettore (a, 0, n_elem - 1); printf ("sono stati effettuati %d confronti\n",nconfronti); printf ("sono stati effettuati %d cicli while",n_elem-n_cicli-1); return 0; }