Du sollst ein Zeigerfeld (Pointerarray) sortieren und nicht die Daten !
Es geht schneller ein Feld über 4 Bytes Zeigeradressen (eine 32 Bit Adresse) zu sortieren, als die Datensatz Blöcke a 100 Bytes.
Code:
struct S_student {
char nachname[30],vorname[20],adresse[40],plz[8],ort[35];
long gebdat /* JJJJMMTT */
,matnr;
};
struct S_student gd_student[100],*gp_student[100];
for(i=0;i<100;i++)
{
gp_student[i]= &gd_student[i];
}
/*
und jetzt über gp_student[i]->matnr auf die Matrikelnummer zugreifen sowie
mittels lokaler Zeigervariable lp_student einen Austausch der Adressen vornehmen,
die Daten bleiben am ursprünglichen Ort.
*/
lp_student= gp_student[i];
gp_student[i]= gp_student[j];
gp_student[j]= lp_student;
/* es wurden nur Adressen vertauscht, Danke für's Gehirn einschalten :) */
Die Ausgabe erfolgt nicht etwa über:
gd_student[i].<member>
sondern über
gp_student[i]-><member>
/* für alle i von 0 bis zur Anzahl der Studenten - 1 (die Anzahl der Studenten ist jedenfalls / muss jedenfalls sein <= 100) */
g steht übrigens für global
l für lokal
das d für daten
das p für pointer
mfg Kikakater