From c31a684212cfc53bd2bcb3a918490246546328eb Mon Sep 17 00:00:00 2001 From: David Monniaux Date: Sat, 6 Apr 2019 07:05:03 +0200 Subject: binary search from Rosetta Code --- test/monniaux/binary_search/Makefile | 26 +++++++++++++++ test/monniaux/binary_search/binary_search.c | 52 +++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 test/monniaux/binary_search/Makefile create mode 100644 test/monniaux/binary_search/binary_search.c (limited to 'test/monniaux/binary_search') diff --git a/test/monniaux/binary_search/Makefile b/test/monniaux/binary_search/Makefile new file mode 100644 index 00000000..7739e4ca --- /dev/null +++ b/test/monniaux/binary_search/Makefile @@ -0,0 +1,26 @@ +include ../rules.mk + +PRODUCTS=binary_search.gcc.host.out binary_search.ccomp.host.out \ + binary_search.gcc.k1c.out binary_search.ccomp.k1c.out \ + binary_search.gcc.k1c.s binary_search.ccomp.k1c.s + +all: $(PRODUCTS) + +binary_search.gcc.host.s binary_search.ccomp.host.s binary_search.gcc.k1c.s binary_search.ccomp.k1c.s : ../clock.h + +binary_search.ccomp.host: binary_search.ccomp.host.o ../clock.gcc.host.o + $(CCOMP) $(CCOMPFLAGS) $+ -o $@ + +binary_search.gcc.host: binary_search.gcc.host.o ../clock.gcc.host.o + $(CC) $(CFLAGS) $+ -o $@ + +binary_search.gcc.k1c: binary_search.gcc.k1c.o ../clock.gcc.k1c.o + $(K1C_CC) $(K1C_CFLAGS) $+ -o $@ + +binary_search.ccomp.k1c: binary_search.ccomp.k1c.o ../clock.gcc.k1c.o + $(K1C_CCOMP) $(K1C_CCOMPFLAGS) $+ -o $@ + +clean: + -rm -f *.o *.s *.k1c + +.PHONY: clean diff --git a/test/monniaux/binary_search/binary_search.c b/test/monniaux/binary_search/binary_search.c new file mode 100644 index 00000000..9b54f28d --- /dev/null +++ b/test/monniaux/binary_search/binary_search.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include "../clock.h" + +typedef int data; +typedef int index; + +int my_bsearch (data *a, index n, data x) { + index i = 0, j = n - 1; + while (i <= j) { + index k = (i + j) / 2; + if (a[k] == x) { + return k; + } + else if (a[k] < x) { + i = k + 1; + } + else { + j = k - 1; + } + } + return -1; +} + +void random_ascending_fill(data *a, index n) { + unsigned r = 41; + data v = 0; + for(index i=0; i