Hallo Horst,
void nSort(int * ar, int start, int stop){
unsigned long min = 0xFFFFffff; // größter anzunehmender Wert
int posmin;
int i;
for(i = start; i < stop; i++){
if( ar[i] < min ) {
min = ar[i];
posmin = i;
}
}
// Plätze tauschen ;-)
unsigned long meta = ar[start];
ar[start] = min;
ar[posmin] = meta;
start++;
if( (stop - start) > 0){
nSort(ar, start, stop); // Rekursiver Aufruf
}
}
ein typisches MaxSort (auch wenn es hier eher ein MinSort ist).
Rekursiv macht man sowas natürlich nicht, sondern nutzt Iteration :-)
Ein Tauschen ist so ungefähr die erste Funktion, die man bei C schreibt, wenn man den Umgang mit Pointern lernt. Schau mal in Deine alten Unterlagen.
Sinngemäß:
nichts zurückgebende Funktion tauschen(Zeiger auf Zahl a, Zeiger auf Zahl b) {
Wir brauchen einen Merker
Schreibe den Inhalt, der an der Adresse von a steht, in den Merker
Schreibe den Inhalt, der an der Adresse von b steht an die Adresse von a
Schreibe den Inhalt des Merkers an die Adresse von b
}
Kriegste bestimmt hin ...
Und Effizienz kann bei einem nicht effizienten Algorithmus kein Argument sein. Das heißt es gibt _keinen_ Grund, keine Funktion dafür zu nehmen sondern Inline-Code. Ich persönlich fand HeapSort einen wundervoll eleganten und zugleich effizienten Sortieralgorithmus ...
Viel Spass bei Deinen Sortierfunktionen.
Freundliche Grüße
Vinzenz