From 8c246e5336d920765c165e7769641da78839ef39 Mon Sep 17 00:00:00 2001 From: Ladislav Laska <laska@kam.mff.cuni.cz> Date: Tue, 10 Jun 2014 10:14:34 +0200 Subject: [PATCH] Lepsi generator sekvenci pro aim-sort. --- aim-sort/Makefile | 2 +- aim-sort/seq-gen.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 aim-sort/seq-gen.c diff --git a/aim-sort/Makefile b/aim-sort/Makefile index 8bc9d49..4f3c6ce 100644 --- a/aim-sort/Makefile +++ b/aim-sort/Makefile @@ -17,7 +17,7 @@ ITERS=20 all: aim-opt aim-dbg -random: random.c +seq-gen: seq-gen.c $(CC) $(OPTCFLAGS) -o $@ $^ $(LDFLAGS) aim-opt: aim-run.c exercise.c diff --git a/aim-sort/seq-gen.c b/aim-sort/seq-gen.c new file mode 100644 index 0000000..4b87080 --- /dev/null +++ b/aim-sort/seq-gen.c @@ -0,0 +1,63 @@ +#include <stdio.h> +#include <assert.h> +#include <stdlib.h> +#include <string.h> + +#define swap(a,b) do { __typeof(a) t = a; a = b; b = t; } while (0); +void qs(int *seq, int l, int r){ + if(l < r){ + int p = l; + for(int i = l + 1; i < r; i++){ + if(seq[i] < seq[l]){ + p++; + swap(seq[i], seq[p]); + } + } + swap(seq[l], seq[p]); + qs(seq, l, p); + qs(seq, p + 1, r); + } +} + +int main(int argc, char **argv) { + if (argc < 3 || argc > 4) { fprintf(stderr, "Usage: [random|sorted|reverse] %s count repeat\n", argv[0]); exit(1); } + int count = atoi(argv[2]); + int repeat = 1; + char *type = argv[1]; + if (argc == 4) repeat = atoi(argv[3]); + + if (count <= 0) { + fprintf(stderr, "Invalid count given: %i\n", count); + exit(2); + } + + if (repeat < 1) { + fprintf(stderr, "Invalid repeat given: %i\n", repeat); + exit(2); + } + + int *data = malloc(sizeof(int)*count); + + fprintf(stderr, "Generating %i %s sequences, each of size %i\n", repeat, type, count); + + for (int i = 0; i < count; i++) { + data[i] = rand(); + } + + if ((!strcmp(type,"sorted"))||(!strcmp(type,"reverse"))) { + qs(data, 0, count); + if (!strcmp(type, "reverse")) { + for (int i = 0; i < count/2; i++) { + swap(data[i],data[count-i-1]); + } + } + } + + /* First, generate a random sequence */ + printf("%i\n", count*repeat); + for (int r = 0; r < repeat; r++) { + for (int i = 0; i < count; i++) { + printf("%i\n", data[i]); + } + } +} -- GitLab