/* This code uses GCC's 64-bit long long int support. */ #include #include #include #define BLOCKSIZE 4096 typedef struct {int key, datum; } item; item a[BLOCKSIZE]; void binary(register long long maxsort) { /* Read ascii integer pairs and output binary form */ register long long t = 0; register int i = 0; while (t < maxsort) { if (scanf("%d%d", &(a[i].key), &(a[i].datum)) != 2) { fprintf(stderr, "Error: only %lld of %lld items on input\n", t, maxsort); exit(2); } ++t; ++i; if (i == BLOCKSIZE) { write(1, a, sizeof(a)); i = 0; } } if (i > 0) { write(1, a, (i * sizeof(a[0]))); } } void check(register long long maxsort) { register long long t = maxsort; register int max = 0x80000000; register int i; while (t > 0) { register int j = BLOCKSIZE; register int k; if (j > t) j = t; k = read(0, a, (j * sizeof(a[0]))); if (k != (j * sizeof(a[0]))) { fprintf(stderr, "Error: only %lld of %lld items on input\n", ((maxsort - t) + (k / sizeof(a[0]))), maxsort); exit(2); } for (i=0; i 0) { --maxsort; a[i].key = myrand(); a[i].datum = datum; ++datum; ++i; if (i == BLOCKSIZE) { write(1, a, sizeof(a)); i = 0; } } if (i > 0) { write(1, a, (i * sizeof(a[0]))); } } void view(register long long maxsort) { register long long t = maxsort; register int i; while (t > 0) { register int j = BLOCKSIZE; register int k; if (j > t) j = t; k = read(0, a, (j * sizeof(a[0]))); if (k != (j * sizeof(a[0]))) { fprintf(stderr, "Error: only %lld of %lld items on input\n", ((maxsort - t) + (k / sizeof(a[0]))), maxsort); exit(2); } for (i=0; i