summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Phillips <david@sighup.nz>2017-04-06 15:13:03 +1200
committerDavid Phillips <david@sighup.nz>2017-04-06 15:13:03 +1200
commite48df354af82d2b691c33d66821a0a520d0c2e44 (patch)
treefb52e7a3f3d2e7a7efed6bb3a4cb2bc080428be0
parent28d1fa5efb5bb1e052c5d555377646eeaa0b5e23 (diff)
downloadinteresting-sorts-e48df354af82d2b691c33d66821a0a520d0c2e44.tar.xz
Improve code style, add timer
-rw-r--r--hist-sort.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/hist-sort.c b/hist-sort.c
index b5166dc..cf7a0dd 100644
--- a/hist-sort.c
+++ b/hist-sort.c
@@ -22,8 +22,8 @@
#define RANGE 10000
#define COUNT 10000000
-int is_sorted(unsigned int *data, size_t length)
-{
+int
+is_sorted(unsigned int *data, size_t length) {
size_t i = 0;
for (i = 0; i < length-1; i++)
@@ -33,20 +33,25 @@ int is_sorted(unsigned int *data, size_t length)
return 1;
}
-void fill_random(unsigned int *data, size_t length, unsigned int max)
-{
+void
+fill_random(unsigned int *data, size_t length, unsigned int max) {
size_t i = 0;
for (i = 0; i < length; i++)
data[i] = rand()%max+1;
}
-void sort(unsigned int *data, size_t length, unsigned int max)
-{
+void
+sort(unsigned int *data, size_t length, unsigned int max) {
size_t *hist = calloc(max+1, sizeof(size_t));
size_t i = 0;
size_t j = 0;
+ if (!hist) {
+ perror("calloc");
+ return;
+ }
+
for (i = 0; i < length; i++) {
hist[data[i]]++;
}
@@ -58,8 +63,8 @@ void sort(unsigned int *data, size_t length, unsigned int max)
}
}
-void dump_data(unsigned int *data, size_t length)
-{
+void
+dump_data(unsigned int *data, size_t length) {
size_t i = 0;
for (i = 0; i < length; i++)
@@ -68,8 +73,9 @@ void dump_data(unsigned int *data, size_t length)
fputc('\n', stdout);
}
-int main(int argc, char **argv)
-{
+int
+main(int argc, char **argv) {
+ clock_t start, end;
unsigned int *data = calloc(COUNT, sizeof(unsigned int));
if (!data) {
@@ -82,9 +88,14 @@ int main(int argc, char **argv)
fill_random(data, COUNT, RANGE);
//dump_data(data, COUNT);
+ start = clock();
sort(data, COUNT, RANGE);
+ end = clock();
//dump_data(data, COUNT);
+ printf("Time elapsed to sort: %.4f\n",
+ ((double)(end-start))/CLOCKS_PER_SEC);
+
if (!is_sorted(data, COUNT)) {
fprintf(stderr, "Failed: out of order\n");
} else {