#include "xwrap.h" #include <inttypes.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <time.h> #include <unistd.h> static int qsort_cb (const void* a, const void* b) { int32_t aa = *(int32_t*)a; int32_t bb = *(int32_t*)b; if (aa > bb) { return 1; } else if (aa < bb) { return -1; } else { return 0; } } static void print_seq (FILE* fp, int32_t* s, long len) { for (int i = 0; i < len; i++) { if (i) { putc (' ', fp); } fprintf (fp, "%" PRId32, s[i]); } putc ('\n', fp); } int main (int argc, char* argv[]) { if (argc < 2) { fprintf (stderr, "Usage: %s length\n", argv[0]); return 1; } long len; if (xatol (argv[1], &len) < 0) { fprintf (stderr, "%s: %s is not a valid length\n", argv[0], argv[1]); return 2; } if (len <= 0) { fprintf (stderr, "%s: %s is not a positive number\n", argv[0], argv[1]); return 2; } srandom (time (NULL) + getpid () + getppid () + getuid ()); int32_t* s = xmalloc (sizeof (int32_t) * len); for (long i = 0; i < len; i++) { s[i] = random (); } printf ("%ld\n", len); print_seq (stdout, s, len); qsort (s, len, sizeof (int32_t), qsort_cb); print_seq (stderr, s, len); free (s); return 0; }