// -- Some adjustments for didactic reasons ----------
typedef unsigned long uint64_t; // ok on theseus
typedef unsigned char uint8_t;
int putchar ( int character );
// ---------------------------------------------------
void
puts(char *str)
{
while (*str) {
putchar(*str++);
}
putchar('\n');
}
uint64_t
strlen(char *str)
{
char *ch = str;
while (*ch) {
++ch;
}
return ch - str;
}
void
quicksort(char *A, uint64_t n)
{
if (n < 2) {
return;
}
uint64_t p = n/2;
uint64_t left = 0;
uint64_t right = n - 1;
do {
while (A[left] < A[p]) {
++left;
}
while (A[p] < A[right]) {
--right;
}
if (left <= right) {
char tmp = A[left];
A[left] = A[right];
A[right] = tmp;
if (left == p) {
p = right;
} else if (right == p) {
p = left;
}
++left;
--right;
}
} while (left <= right);
quicksort(A, right + 1);
quicksort(A+left, n - left);
}
char msg[] = "hello, world!";
int
main()
{
puts(msg);
quicksort(msg, strlen(msg));
puts(msg);
}