sort.c (852B)
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 }