randomise(strings, n) char *strings[]; int n; { int i; int v; char *t; for (i = 0; i < 1000 ; i++) { v = rand() % 1000 ; t = strings[v]; strings[v] = strings[i]; strings[i] = t; } } check_order(sort_type, strings, n) char *sort_type; char *strings[]; int n; { int i; for (i = 0; i < n; i++) { if (atoi(strings[i]) != i) { printf("%s sort failed - exiting\n", sort_type); exit(1); } } } qs_string_compare(a, b) char *a,*b; { return strcmp(*(char **)a, *(char **)b); } main() { char *strings[1000 ], *strings_copy[1000 ]; char buffer[1000 *(6 +1)]; char *p; int i; p = buffer; for (i = 0; i < 1000 ; i++) { sprintf(p, "%06d" , i); strings[i] = p; p += 6 +1; } randomise(strings, 1000 ); memcpy(strings_copy, strings, sizeof(strings)); qsort(strings_copy, 1000 , sizeof(char *), qs_string_compare); check_order("Quick", strings_copy, 1000 ); }