taming-cpp

Experiments with C++ and comparisons with C
git clone https://git.tronto.net/taming-cpp
Download | Log | Files | Refs | README

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 }