Algorithmus zum sortieren eines Tripels

Die nachfolgende Publikation befasst sich mit dem sortieren von Tripeln T = {a,b,c}. Wobei a,b,c ihrer Größe nach sortiert werden sollen.

Angenommen es soll ein Array s[i] mit drei Elementen sortiert werden. Wobei i die aktuelle Position des Arrays von 0 bis 2 darstellen soll.

Dann ist der größte Betrag max:

max = (s[0] > s[1]) ? ( (s[0] > s[2]) ? s[0] : s[2] ) : ( (s[1] > s[2]) ? s[1] : s[2] );

mit der Position:

maxi = (s[0] > s[1]) ? ( (s[0] > s[2]) ? 0 : 2 ) : ( (s[1] > s[2]) ? 1 : 2 );

und der kleinste Betrag entsprechend:

min  = (s[0] < s[1]) ? ( (s[0] < s[2]) ? s[0] : s[2] ) : ( (s[1] < s[2]) ? s[1] : s[2]);

mit der Position:

mini =  (s[0] < s[1]) ? ( (s[0] < s[2]) ? 0 : 2 ) : ( (s[1] < s[2]) ? 1 : 2 );

Der die letzte gebliebene Position kann wie folgt ausgerechnet werden:

midi = 3 – (mini+maxi);

mit dem dazugehörigen Wert s[midi]

Beweis:

mini  = 0
maxi = 1
midi = 3 – (1+0) = 2
mini  = 1
maxi = 2
midi = 3 – (1+2) = 0
mini  = 2
maxi = 0
midi = 3 – (2+0) = 1

Code herunterladen:

cmaxmidmin.c - v1.01 - c
Dieser Algorithmus sortiert ein Tripel und gibt die jeweiligen Positionen aus.
/*
	Mordwinzew Waldemar 31.10.2009
	Dieser Algorithmus gibt den groessten, 
	zweitgroessten und den kleinsten Wert aus.
 
	v1.01
 
	http://www.mordwinzew.de/artikel/algorithmen/tripel-sortieren
 
*/
 
#include <time.h>
#include <stdio.h>
 
int main()
{
	unsigned int mini,midi,maxi,min,mid,max;
	unsigned int s[3];
	srand(time(NULL));
	s[0] = rand() %100 +1;
	s[1] = rand() %100 +1; 
	s[2] = rand() %100 +1;
 
	// maximaler Betrag:
	max =   (s[0] > s[1]) ? ((s[0] > s[2]) ? s[0] : s[2]) : ((s[1] > s[2]) ? s[1] : s[2]);
	// Position:
	maxi =  (s[0] > s[1]) ? ((s[0] > s[2]) ? 0 : 2) : ((s[1] > s[2]) ? 1 : 2);
 
	// minimaler Betrag:
	min  =  (s[0] < s[1]) ? ((s[0] < s[2]) ? s[0] : s[2]) : ((s[1] < s[2]) ? s[1] : s[2]);
	// Position: 
	mini =  (s[0] < s[1]) ? ((s[0] < s[2]) ? 0 : 2) : ((s[1] < s[2]) ? 1 : 2);
 
	// Die uebriggebliebene Position kann wie folgt berechnet werden:
	midi = 3 - (mini+maxi);
	// mit dem dazugehoerigen Wert:
	mid = s[midi];
 
	printf("s[0]: %i\ns[1]: %i\ns[2]: %i\n\n",s[0],s[1],s[2]);
	printf("max: %i\t maxi: %i\n",max,maxi);
	printf("mid: %i\t midi: %i\n",mid,midi);
	printf("min: %i\t mini: %i\n",min,mini);
 
	// Warte auf die Eingabetaste
	setvbuf(stdin,NULL,_IONBF,0); 
	setvbuf(stdin,NULL,_IOFBF,BUFSIZ); 
	getchar(); 
 
	return 0;
}
Schlagwörter: ,