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:
maxmidmin.c/*
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;
}