From 7208221ed45d1b4fddf876ac6f072f0c36cab270 Mon Sep 17 00:00:00 2001 From: David Phillips Date: Thu, 6 Apr 2017 15:26:27 +1200 Subject: Improve documentation, add comamnd line arguments --- hist-sort.c | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/hist-sort.c b/hist-sort.c index cf7a0dd..423f026 100644 --- a/hist-sort.c +++ b/hist-sort.c @@ -19,9 +19,6 @@ #include #include -#define RANGE 10000 -#define COUNT 10000000 - int is_sorted(unsigned int *data, size_t length) { size_t i = 0; @@ -52,32 +49,43 @@ sort(unsigned int *data, size_t length, unsigned int max) { return; } - for (i = 0; i < length; i++) { + /* build the histogram */ + for (i = 0; i < length; i++) hist[data[i]]++; - } + /* expand histogram to form sorted set */ j = 0; - for (i = 0; i < max+1; i++) { + for (i = 0; i < max+1; i++) for (; hist[i]; hist[i]--, j++) data[j] = i; - } } void -dump_data(unsigned int *data, size_t length) { - size_t i = 0; - - for (i = 0; i < length; i++) - printf("%d, ", data[i]); - - fputc('\n', stdout); +show_usage(const char *argv0) { + fprintf(stderr, "usage: %s \n", argv0); } int main(int argc, char **argv) { clock_t start, end; - unsigned int *data = calloc(COUNT, sizeof(unsigned int)); + unsigned int *data = NULL; + int range = 0; + int count = 0; + + if (argc != 3) { + show_usage(argv[0]); + return 1; + } + + count = atoi(argv[1]); + range = atoi(argv[2]); + + if (count <= 0 || range <= 0) { + show_usage(argv[0]); + return 1; + } + data = calloc(count, sizeof(unsigned int)); if (!data) { perror("calloc"); return 1; @@ -85,18 +93,16 @@ main(int argc, char **argv) { srand(time(NULL)); - fill_random(data, COUNT, RANGE); + fill_random(data, count, range); - //dump_data(data, COUNT); start = clock(); - sort(data, COUNT, RANGE); + sort(data, count, range); end = clock(); - //dump_data(data, COUNT); - printf("Time elapsed to sort: %.4f\n", + printf("Time taken to sort: %.4f\n", ((double)(end-start))/CLOCKS_PER_SEC); - if (!is_sorted(data, COUNT)) { + if (!is_sorted(data, count)) { fprintf(stderr, "Failed: out of order\n"); } else { printf("Success.\n"); -- cgit v1.1