#include #include #include #define MAX_LINES 1024 #define MAX_LINE_LENGTH 1024 void swap(char *v[], int i, int j) { char *temp; temp = v[i]; v[i] = v[j]; v[j] = temp; } void sort(char *v[], int left, int right) { int i, last; if (left >= right) return; swap(v, left, (left + right) / 2); last = left; for (i = left+1; i <= right; i++) if (strcmp(v[i], v[left]) < 0) swap(v, ++last, i); swap(v, left, last); sort(v, left, last-1); sort(v, last+1, right); } int main(int argc, char *argv[]) { char *ppcArray[MAX_LINES]; char pcLine[MAX_LINE_LENGTH]; int iLineCount = 0; int i; while (fgets(pcLine, MAX_LINE_LENGTH, stdin) != NULL) { if (iLineCount == MAX_LINES) break; ppcArray[iLineCount] = (char*)malloc(strlen(pcLine)); strcpy(ppcArray[iLineCount], pcLine); ++iLineCount; } sort(ppcArray, 0, iLineCount - 1); for (i = 0; i < iLineCount; ++i) fputs(ppcArray[i], stdout); fflush(stdout); fprintf(stderr, "Line count: %d.\n", iLineCount); return 0; }