So habe jetzt das komplette Programm noch mal umgeschrieben, aber den Sortier algorithmus gelassen und es scheint zu funktionieren.
#include <stdio.h>
void belegung();
void arraybelegung();
void sortierung (int*, int*);
void druck();
int feld[1000];
int i;
int hilfe;
int x;
int j=0;
int end;
main(void)
{
printf("\n\n====== SORTIERALGORITHMUS 'QUICKSORT' ======\n");
belegung();
sortierung(feld, feld+end-1);
druck();
}
void belegung()
{
printf("\nBITTE END-WERT ANGEBEN!\n");
scanf("%d",&end);
printf("\nBITTE WERTE EINGEBEN!\n");
for(i=0;i<end;i++)
{
printf("\nWert %d: ",i+1);
scanf("%d",&feld[i]);
}
printf("\nDIE UNSORTIERTEN WERTE LAUTEN: ");
for(i=0;i<end;i++)
{
printf("%5d",feld[i]);
}
printf("\n");
}
void sortierung(int *links, int *rechts)
{
int *posl=links;
int *posr=rechts;
x = *(links + (rechts - links >> 1));
do
{
while(*posl < x) posl++;
while(*posr > x) posr--;
if(posl > posr)
break;
hilfe = *posl;
*posl=*posr;
*posr=hilfe;
printf("\nZWISCHENSCHRITT\n\n");
for(i=0;i<end;i++)
{
printf("%5d",feld[i]);
}
printf("\n");
}
while(++posl <= --posr);
if(links < posr) sortierung(links, posr);
if(posl < rechts) sortierung(posl, rechts);
}
void druck()
{
printf("\nDIE SORTIERTEN WERTE LAUTEN: ");
for(i=0;i<end;i++)
{
printf("%5d",feld[i]);
}
printf("\n\n");
}
So das wäre das komplette Programm!
#include <stdio.h>
void belegung();
void arraybelegung();
void sortierung (int*, int*);
void druck();
int feld[1000];
int i;
int hilfe;
int x;
int j=0;
int end;
So Globale Variablendekleration bzw. Initialisierung der Unterfunktionen
main(void)
{
printf("\n\n====== SORTIERALGORITHMUS 'QUICKSORT' ======\n");
belegung();
sortierung(feld, feld+end-1);
druck();
}
So das Hauptprogramm, welches die einzelnen Hauptfunktionen aufruft!
void belegung()
{
printf("\nBITTE END-WERT ANGEBEN!\n");
scanf("%d",&end);
printf("\nBITTE WERTE EINGEBEN!\n");
for(i=0;i<end;i++)
{
printf("\nWert %d: ",i+1);
scanf("%d",&feld[i]);
}
printf("\nDIE UNSORTIERTEN WERTE LAUTEN: ");
for(i=0;i<end;i++)
{
printf("%5d",feld[i]);
}
printf("\n");
}
So ein Endwert fürs Feld wird abgefragt und in 'end' geschrieben.
Einzelnen Werte werden eingegeben und zur Überprüfung ausgegeben.
void sortierung(int *links, int *rechts)
{
int *posl=links;
int *posr=rechts;
x = *(links + (rechts - links >> 1));
do
{
while(*posl < x) posl++;
while(*posr > x) posr--;
if(posl > posr)
break;
hilfe = *posl;
*posl=*posr;
*posr=hilfe;
printf("\nZWISCHENSCHRITT\n\n");
for(i=0;i<end;i++)
{
printf("%5d",feld[i]);
}
printf("\n");
}
while(++posl <= --posr);
if(links < posr) sortierung(links, posr);
if(posl < rechts) sortierung(posl, rechts);
}
So der Sortieralgorithmus. Übergen wurden der Anfangs wer (0) und der Endwert (end-1) an die Unterfunktion. Ich habe mir die Zwischenschritte mit anzeigen lassen zum besseren Nachvollziehen. Zum Schluss wird eben die Funktion 'sortierung' rekursiv für die Teilstück aufgerufen.
void druck()
{
printf("\nDIE SORTIERTEN WERTE LAUTEN: ");
for(i=0;i<end;i++)
{
printf("%5d",feld[i]);
}
printf("\n\n");
}
Und halt die Ausgabe der sortierten Werte.
So im Moment funktioniert es. Die Frage ist ob man den Sortieralgorithmus noch vereinfachen kann oder nicht. Bzw. ob Fehler noch drin sind, falls jemand was auffällt!