int less_than(const char * s1, const char * s2) { while (*s1 == *s2 && *s1 != 0) { ++s1; ++s2; } return (*s1 < *s2); } void insertion_sort(const char * S[], unsigned int n) { for (unsigned int i = 1; i < n; ++i) { for (unsigned int j = i; j > 0 && less_than(S[j], S[j-1]); --j) { const char * tmp = S[j]; S[j] = S[j-1]; S[j-1] = tmp; } } } void sort_strings(const char * input, char * output, unsigned int n) { const char * S[1000]; const char * s = input; for (unsigned int i = 0; i < n; ++i) { S[i] = s; while (*s) ++s; ++s; } insertion_sort(S, n); char * o = output; for (unsigned int i = 0; i < n; ++i) { s = S[i]; for (;;) { *o = *s; if (! *o) { ++o; break; } ++o; ++s; } } }