1. bfind.e / orphaned code?

I finally located this file on Jiri Babor's site.  I really wish
that it was in the archive - Gabriel Boehme, Jiri Babor, Joe Otto,
and Luscious Hilley have not been active on the list for several
years. If Rob feels its appropriate, I'd like him to post it
in the archives: 

global function bfind(object x, sequence s)
-- does a binary search on a sorted sequence
-- returns index location if found, 0 if not
-- assumes that sequence s has been sorted prior to this call
-- Gabriel Boehme's code
-- Earlier Joe Otto's routine is almost identical.
integer lo, hi, mid, c
   lo = 1
   hi = length(s)

   while lo <= hi do
      mid = floor((lo + hi) / 2)
      c = compare(x, s[mid])
      if    c < 0 then  -- x < s[mid]
         hi = mid - 1
      elsif c > 0 then  -- x > s[mid]
         lo = mid + 1
      else              -- x = s[mid]
         return mid
      end if
   end while

   return 0
end function

Luscious Hilley posted this to the list several years earlier:

----bfind.e
global function bfind(object this_in, sequence that)
  integer min, max, gtlt, here

  min = 0
  max = length(that)
  here = floor((max / 2) + .5)
  while min != max do
    gtlt = compare(this_in, that[here])
    if gtlt = 0 then
      return here
    elsif gtlt = 1 then
      min = here
      here = floor(((min + max) / 2) + .5)
    else
      max = here
      here = floor(((min + max) / 2) + .5)
    end if
  end while

  return 0
end function

Ken Rhodes
100% MicroSoft Free
SuSE Linux 10.0
No AddWare, SpyWare, or Viruses!
Life is Good  smile

new topic     » topic index » view message » categorize

2. Re: bfind.e / orphaned code?

Kenneth Rhodes wrote:
> I finally located this file on Jiri Babor's site.  I really wish
> that it was in the archive - Gabriel Boehme, Jiri Babor, Joe Otto,
> and Luscious Hilley have not been active on the list for several
> years. If Rob feels its appropriate, I'd like him to post it
> in the archives: 
> 
> global function bfind(object x, sequence s)
> -- does a binary search on a sorted sequence
> -- returns index location if found, 0 if not
> -- assumes that sequence s has been sorted prior to this call
> -- Gabriel Boehme's code
> -- Earlier Joe Otto's routine is almost identical.
> integer lo, hi, mid, c
>    lo = 1
>    hi = length(s)
> 
>    while lo <= hi do
>       mid = floor((lo + hi) / 2)
>       c = compare(x, s[mid])
>       if    c < 0 then  -- x < s[mid]
>          hi = mid - 1
>       elsif c > 0 then  -- x > s[mid]
>          lo = mid + 1
>       else              -- x = s[mid]
>          return mid
>       end if
>    end while
> 
>    return 0
> end function
> 
> Luscious Hilley posted this to the list several years earlier:
> 
> ----bfind.e
> global function bfind(object this_in, sequence that)
>   integer min, max, gtlt, here
> 
>   min = 0
>   max = length(that)
>   here = floor((max / 2) + .5)
>   while min != max do
>     gtlt = compare(this_in, that[here])
>     if gtlt = 0 then
>       return here
>     elsif gtlt = 1 then
>       min = here
>       here = floor(((min + max) / 2) + .5)
>     else
>       max = here
>       here = floor(((min + max) / 2) + .5)
>     end if
>   end while
> 
>   return 0
> end function

I think whoever is working on the Euphoria Standard Library
should include this somewhere. I agree that a standard
binary search would be useful. Maybe I'll eventually add it
to euphoria\include somewhere.

Regards,
   Rob Craig
   Rapid Deployment Software
   http://www.RapidEuphoria.com

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu