71 lines
1.5 KiB
C
71 lines
1.5 KiB
C
# include <stdio.h>
|
|
|
|
# define PRINT(X) \
|
|
{int i; \
|
|
printf ("%-10s", X); \
|
|
for (i = 0; i < 4; i++) printf (" %2d ", a[i]); \
|
|
printf ("\n"); \
|
|
}
|
|
|
|
void quicksort (int *a, int links, int rechts)
|
|
/* sortiert die Elemente a[links] .. a[rechts] */
|
|
{
|
|
/* partitioniere a[links] .. a[rechts] */
|
|
int m = (links + rechts) / 2 ;
|
|
int x = a[m];
|
|
int l = links, r = rechts;
|
|
|
|
PRINT ("\nvor part");
|
|
printf ("l=%d m=%d x=%d, r=%d\n", l, m, x, r);
|
|
while (l <= r) {
|
|
while (a[l] < x) l++;
|
|
printf ("von links: l=%d\n", l);
|
|
while (a[r] > x) r--;
|
|
printf ("von rechts: r=%d\n", r);
|
|
|
|
if (l <= r) {
|
|
int t = a[l]; a[l] = a[r]; a[r] = t;
|
|
/* a[l] <-> a[r] */
|
|
l++; r--; /* "verschiebe Pfeile" */
|
|
PRINT ("nach swap");
|
|
}
|
|
}
|
|
|
|
printf ("l=%d m=%d x=%d, r=%d\n", l, m, x, r);
|
|
PRINT ("nach part");
|
|
|
|
/* Sortiere linken und rechten Teilarray */
|
|
if (links < r) quicksort (a, links, r);
|
|
if (l < rechts) quicksort (a, l, rechts);
|
|
}
|
|
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
int a[5] = {58,91,28,80,54};
|
|
|
|
PRINT ("start");
|
|
/*
|
|
int l = 0, r = 1;
|
|
int m = 2;
|
|
int x = a[m];
|
|
int i;
|
|
|
|
while (l <= r) {
|
|
while (a[l] < x) l++;
|
|
printf ("von links: l=%d\n", l);
|
|
while (a[r] > x) r--;
|
|
printf ("von rechts: l=%d\n", l);
|
|
if (l <= r) {
|
|
int t = a[l]; a[l] = a[r]; a[r] = t;
|
|
l++; r--;
|
|
}
|
|
}
|
|
*/
|
|
|
|
quicksort (a, 0, 4);
|
|
|
|
PRINT ("res");
|
|
return 0;
|
|
}
|