diff options
Diffstat (limited to 'sort-benchmark/pairs/sort.c')
| -rw-r--r-- | sort-benchmark/pairs/sort.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/sort-benchmark/pairs/sort.c b/sort-benchmark/pairs/sort.c new file mode 100644 index 0000000..826a684 --- /dev/null +++ b/sort-benchmark/pairs/sort.c | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | #define _POSIX_C_SOURCE 200809L /* Required to use clock_gettime */ | ||
| 2 | |||
| 3 | #include <stdio.h> | ||
| 4 | #include <stdlib.h> | ||
| 5 | #include <time.h> | ||
| 6 | |||
| 7 | typedef struct { int a, b; } pair_t; | ||
| 8 | pair_t a[ARRAYSIZE]; | ||
| 9 | |||
| 10 | int compar(const void *x, const void *y) { | ||
| 11 | pair_t *p = (pair_t *)x; | ||
| 12 | pair_t *q = (pair_t *)y; | ||
| 13 | int d = p->a - q->a; | ||
| 14 | return d > 0 ? 1 : (d < 0 ? -1 : (q->b - p->b)); | ||
| 15 | } | ||
| 16 | |||
| 17 | int main() { | ||
| 18 | srand(time(NULL)); | ||
| 19 | for (int i = 0; i < ARRAYSIZE; i++) { | ||
| 20 | a[i].a = rand() % 1000000; | ||
| 21 | a[i].b = rand() % 1000000; | ||
| 22 | } | ||
| 23 | |||
| 24 | struct timespec begin; | ||
| 25 | clock_gettime(CLOCK_MONOTONIC, &begin); | ||
| 26 | |||
| 27 | qsort(a, ARRAYSIZE, sizeof(pair_t), compar); | ||
| 28 | |||
| 29 | struct timespec end; | ||
| 30 | clock_gettime(CLOCK_MONOTONIC, &end); | ||
| 31 | double time = end.tv_sec - begin.tv_sec + | ||
| 32 | (end.tv_nsec - begin.tv_nsec) / 1000000000.0; | ||
| 33 | |||
| 34 | printf("(%d) C time for %d pairs: %lfs\n", | ||
| 35 | a[ARRAYSIZE/2].a, ARRAYSIZE, time); | ||
| 36 | |||
| 37 | return 0; | ||
| 38 | } | ||
