From e98c5b65e9b24e7020ef1dd1e9066ba318c91a31 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Thu, 26 Dec 2024 15:10:33 +0000 Subject: [PATCH] add bin search function --- fcore/bin-search.sml | 23 +++++++++++++++++++++++ oms.mlb | 1 + 2 files changed, 24 insertions(+) create mode 100644 fcore/bin-search.sml diff --git a/fcore/bin-search.sml b/fcore/bin-search.sml new file mode 100644 index 0000000..c752672 --- /dev/null +++ b/fcore/bin-search.sml @@ -0,0 +1,23 @@ +structure BinSearch = +struct + local + fun helpFind (findNum, vec, low, high) = + if high >= low then + let + val mid = low + ((high - low) div 2) + val curNum = Vector.sub (vec, mid) + in + if curNum = findNum then + mid + else if curNum < findNum then + helpFind (findNum, vec, mid + 1, high) + else + helpFind (findNum, vec, low, mid - 1) + end + else + ~1 + in + fun find (findNum, vec) = + helpFind (findNum, vec, 0, Vector.length vec - 1) + end +end diff --git a/oms.mlb b/oms.mlb index 54ec3af..6c0ccdd 100644 --- a/oms.mlb +++ b/oms.mlb @@ -2,6 +2,7 @@ $(SML_LIB)/basis/basis.mlb (* fcore *) fcore/quad-tree.sml +fcore/bin-search.sml ann "allowVectorExps true"