Files
T2000/quicksort.c
Darkress cf51fd7775 Init
2023-04-04 17:54:49 +02:00

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;
}