32static const size_t SIZES[] = {100, 1000, 10000};
38 for (
size_t i = 0; i < n; i++) out[i] = (
int)(rand() % (int)n);
42 struct timespec t0, t1;
43 clock_gettime(CLOCK_MONOTONIC, &t0);
45 clock_gettime(CLOCK_MONOTONIC, &t1);
46 return (t1.tv_sec - t0.tv_sec) * 1000.0
47 + (t1.tv_nsec - t0.tv_nsec) / 1e6;
51 printf(
"# Sort benchmarks (random integers)\n\n");
52 printf(
"| Algorithm ");
53 for (
size_t s = 0; s <
N_SIZES; s++) printf(
"| n=%-6zu ",
SIZES[s]);
54 printf(
"|\n|------------");
55 for (
size_t s = 0; s <
N_SIZES; s++) printf(
"|---------");
60 int *original = malloc(max_n *
sizeof(
int));
61 int *working = malloc(max_n *
sizeof(
int));
62 if (!original || !working) {
63 fprintf(stderr,
"out of memory\n");
64 free(original); free(working);
68 for (
size_t i = 0; i <
N_SORTS; i++) {
69 printf(
"| %-10s ",
SORTS[i].name);
70 for (
size_t s = 0; s <
N_SIZES; s++) {
73 memcpy(working, original, n *
sizeof(
int));
75 printf(
"| %7.2fms ", ms);
void(* sort_fn)(int *, size_t)
static double time_sort_ms(sort_fn fn, int *arr, size_t n)
static void fill_random(int *out, size_t n, unsigned seed)
static const sort_entry_t SORTS[]
static const size_t SIZES[]
static const size_t N_SIZES
static const size_t N_SORTS
void bubble_sort_ints(int *arr, size_t n)
void insertion_sort_ints(int *arr, size_t n)
void merge_sort_ints(int *arr, size_t n)
void quicksort_ints(int *arr, size_t n)
void selection_sort_ints(int *arr, size_t n)
Unified header for all sorting algorithms.