Vinzenz Mai: Ringtausch, Kreuztausch ohne Datenverlust

Beitrag lesen

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