Oppure

Loading
15/02/09 13:43
raeiko
Salve ragazzi,
ho iniziato a studiare programmazione un mesetto fa e in questo momento sto iniziando a studiare gli arrays.

Uno degli esercizi che devo risolvere mi chiede di modificare l'algoritmo bubble sort per verificare se alla fine di ogni iterazione è stato effettuato uno scambio o meno. Se non è stato effettuato nessuno scambio il programma termina altrimenti è necessaria almeno un'altra iterazione.

Ho provato a scrivere il codice (considerando che non posso usare nè variabili booleane nè flags xkè non le ho ancora studiate) ma proprio non mi riesce.

Non cerco qualcuno che faccia i compiti per me,vorrei sono capire come procedere.

Grazie,
raeiko

/* Program that modifies the bubble sort array in fig. 6.15 */

#include <stdio.h>
#define SIZE 10

int main ( void )
{
	int a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; /* declare and initialize array a */
	int pass; /* passes counter */
	int i; /* comparisons counter */
	int hold; /* temporary location used to swap arrays elements */
	int NumOfComparisons = 0;

	printf( "Data items in original order:\n\n" ); 

	for ( i = 0; i < SIZE; i++ ){ /* display array output */
		printf( "%4d", a[ i ] );
	} /* end of for loop */

	/* bubble sort */
	for ( pass = 1; pass < SIZE; pass++ ){
		for ( i = 0; i < SIZE - 1; i++ ){
			if ( a[ SIZE ] == a[ 1 ] < a[ i + 1] ){
				break;
			}

			else if ( a[ i ] > a[ i + 1] ){
			hold = a[ i ];
			a[ i ] = a[ i + 1];
			a[ i + 1] = hold;
			pass++;
			}/* end of if */

	NumOfComparisons = NumOfComparisons + 1;

		}/* end of inner for */

	}/* end of outer for */

	printf( "\nData items in ascending order:\n\n" );

	for ( i = 0; i < SIZE; i++ ){ /* output array in ascending order */
		printf( "%4d", a[ i ] );
	}
	
	printf( "\n\n" );

	printf( "Number of comparisons: %d\n", NumOfComparisons );
	
	
return 0;
}
aaa
15/02/09 18:16
pierotofy
Questa istruzione:

if ( a[ SIZE ] == a[ 1 ] < a[ i + 1] )


E' logicamente incorretta, stai facendo una comparazione numerica e booleana, che viene eseguita sempre se a[1] < a[i + 1].

L'algoritmo comunque lo puoi esaminare qui: it.wikipedia.org/wiki/…

Il mio blog: piero.dev