From 6e9f3d396d4087150f8ec148802c32252eaeead5 Mon Sep 17 00:00:00 2001 From: David Monniaux Date: Mon, 8 Apr 2019 16:01:06 +0200 Subject: better intermediate point --- test/monniaux/binary_search/binary_search.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'test/monniaux/binary_search') diff --git a/test/monniaux/binary_search/binary_search.c b/test/monniaux/binary_search/binary_search.c index df9b7b46..d5839955 100644 --- a/test/monniaux/binary_search/binary_search.c +++ b/test/monniaux/binary_search/binary_search.c @@ -29,11 +29,13 @@ int my_bsearch2 (data *a, index n, data x) { index i = 0, j = n - 1; while (i <= j) { index k = (i + j) / 2; - if (a[k] == x) { + index kp1 = k+1, km1 = k-1; + data ak = a[k]; + i = TERNARY32(ak < x, kp1, i); + j = TERNARY32(ak > x, km1, j); + if (ak == x) { return k; } - i = TERNARY32(a[k] < x, k+1, i); - j = TERNARY32(a[k] > x, k-1, j); } return -1; } @@ -43,10 +45,11 @@ int my_bsearch3 (data *a, index n, data x) { k = (i + j) / 2; while (i <= j) { index kp1 = k+1, km1 = k-1; - _Bool lt = a[k] < x, gt = a[k] > x; + data ak = a[k]; + _Bool lt = ak < x, gt = ak > x; i = TERNARY32(lt, kp1, i); j = TERNARY32(gt, km1, j); - if (a[k] == x) { + if (ak == x) { goto end; } k = (i + j) / 2; -- cgit