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