Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, SAI

Loesungen zum 3. Uebungsblatt (03.11.98 - 10.11.98)


/* Uebungsblatt 3 Aufgabe 4 / 10 Punkte 
 * shaker - Sortieralgorithmus
 */
#include 
#include 

#define MAXLENGTH 3000

int shakersort ( int tosort[], int num){
	int i, dummy, endarray, anfarray;
	boolean getauscht = 1;

	anfarray = 0;
	endarray = num;
	
	while ( getauscht )
	{
		getauscht = 0;

		/* Durchlauf von Anfang bis Ende */
		for (i = anfarray; i < endarray; i++)
		{
		   if ( tosort[i] > tosort[i+1] )
		   {
			getauscht = 1;
			/* tauschen der zwei Feldinhalte */
			dummy = tosort[i+1];
			tosort[i+1] = tosort[i];
			tosort[i] = dummy;
		   }
		}
		endarray -= 1;

		if (getauscht) 
		{
			getauscht = 0;
			/* Durchlauf von Ende bis Anfang */
			for (i = endarray; i > anfarray; i--)
			{
			   if ( tosort[i] < tosort[i-1] )
			   {
				getauscht = 1;
				/* tauschen der zwei Feldinhalte */
				dummy = tosort[i-1];
				tosort[i-1] = tosort[i];
				tosort[i] = dummy;
			   }
			}
		}
		anfarray += 1;
	}
	return 0;
}

int main( void ){

	int intarray [MAXLENGTH];
	int i, index = 0, erg;

	for ( i= 0; i < MAXLENGTH; i++)
	{
	   intarray[i] = 0;
	}

  	while( (scanf(" %d" , &i ) != EOF ) 
	       && (index < MAXLENGTH ) )
	{
    		/* Standardeingabe in Array der vorgegeben Laenge einlesen */
		intarray[index] = i;
    		index++;
  	}
  	/* wenn die maximale Laenge erreicht ist, bzw. die Eingabe zuende,
   	 * den Array sortieren 
   	 */
	erg = shakersort(intarray,index-1); 

	/* Ausgabe des Arrays */
	i = 0;
        while( i < index){
           printf(" %ld \t", intarray[i]); 
	   i++;
        }

  	return 0;
}



Universität Fakultät SAI


Martina Maier, 11. November 1998