Binary search: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 643: | Line 643: | ||
UNTIL H%=0 |
UNTIL H%=0 |
||
IF S%=A%(B%) THEN = B% ELSE = -1</lang> |
IF S%=A%(B%) THEN = B% ELSE = -1</lang> |
||
=={{header|Batch File}}== |
|||
<lang windowsnt> |
|||
@echo off & setlocal enabledelayedexpansion |
|||
:: Binary Chop Algorithm - Michael Sanders 2017 |
|||
:: |
|||
:: example output... |
|||
:: |
|||
:: binary chop algorithm vs. standard for loop |
|||
:: |
|||
:: number to find 941 |
|||
:: for loop required 941 iterations |
|||
:: binchop required 10 iterations |
|||
:setup |
|||
set x=1 |
|||
set y=999 |
|||
set /a z=(%random% * (%y% - 1) / 32768 + 1) |
|||
:pseudoarray |
|||
for /l %%q in (%x%,1,%y%) do set /a array[%%q]=%%q |
|||
:std4loop |
|||
for /l %%q in (%x%,1,%y%) do ( |
|||
if !array[%%q]!==%z% (set f=%%q& goto :binchop) |
|||
) |
|||
:binchop |
|||
if !x! leq !y! ( |
|||
set /a i+=1 |
|||
set /a "p=(!x!+!y!)/2" |
|||
call set /a t=%%array[!p!]%% |
|||
if !t! equ !z! (set b=!i!& goto :done) |
|||
if !t! lss !z! (set /a x=!p!+1) else (set /a y=!p!-1) |
|||
goto :binchop |
|||
) |
|||
:done |
|||
cls |
|||
echo binary chop algorithm vs. standard for loop... |
|||
echo. |
|||
echo . number to find !z! |
|||
echo . for loop required !f! iterations |
|||
echo . binchop required !b! iterations |
|||
endlocal & exit /b 0 |
|||
</lang> |
|||
=={{header|Brat}}== |
=={{header|Brat}}== |