/* Sorts the SIZE bytes in BUF into nondecreasing order, using the quick-sort algorithm. */ void qsort_bytes (unsigned char *buf, size_t size) { if (!is_sorted (buf, size)) { int pivot = pick_pivot (buf, size); unsigned char *left_half = buf; size_t left_size = partition (buf, size, pivot); unsigned char *right_half = left_half + left_size; size_t right_size = size - left_size; if (left_size <= right_size) { qsort_bytes (left_half, left_size); qsort_bytes (right_half, right_size); } else { qsort_bytes (right_half, right_size); qsort_bytes (left_half, left_size); } } }
int main (int argc UNUSED, char *argv[]) { int handle; unsigned char buf[128 * 1024]; size_t size; quiet = true; CHECK ((handle = open (argv[1])) > 1, "open \"%s\"", argv[1]); size = read (handle, buf, sizeof buf); qsort_bytes (buf, sizeof buf); seek (handle, 0); write (handle, buf, size); close (handle); return 72; }