67 lines
1.4 KiB
Plaintext
67 lines
1.4 KiB
Plaintext
function BinarySearch-Iterative ([int[]]$Array, [int]$Value)
|
|
{
|
|
[int]$low = 0
|
|
[int]$high = $Array.Count - 1
|
|
|
|
while ($low -le $high)
|
|
{
|
|
[int]$mid = ($low + $high) / 2
|
|
|
|
if ($Array[$mid] -gt $Value)
|
|
{
|
|
$high = $mid - 1
|
|
}
|
|
elseif ($Array[$mid] -lt $Value)
|
|
{
|
|
$low = $mid + 1
|
|
}
|
|
else
|
|
{
|
|
return $mid
|
|
}
|
|
}
|
|
|
|
return -1
|
|
}
|
|
|
|
function BinarySearch-Recursive ([int[]]$Array, [int]$Value, [int]$Low = 0, [int]$High = $Array.Count)
|
|
{
|
|
if ($High -lt $Low)
|
|
{
|
|
return -1
|
|
}
|
|
|
|
[int]$mid = ($Low + $High) / 2
|
|
|
|
if ($Array[$mid] -gt $Value)
|
|
{
|
|
return BinarySearch $Array $Value $Low ($mid - 1)
|
|
}
|
|
elseif ($Array[$mid] -lt $Value)
|
|
{
|
|
return BinarySearch $Array $Value ($mid + 1) $High
|
|
}
|
|
else
|
|
{
|
|
return $mid
|
|
}
|
|
}
|
|
|
|
function Show-SearchResult ([int[]]$Array, [int]$Search, [ValidateSet("Iterative", "Recursive")][string]$Function)
|
|
{
|
|
switch ($Function)
|
|
{
|
|
"Iterative" {$index = BinarySearch-Iterative -Array $Array -Value $Search}
|
|
"Recursive" {$index = BinarySearch-Recursive -Array $Array -Value $Search}
|
|
}
|
|
|
|
if ($index -ge 0)
|
|
{
|
|
Write-Host ("Using BinarySearch-{0}: {1} is at index {2}" -f $Function, $numbers[$index], $index)
|
|
}
|
|
else
|
|
{
|
|
Write-Host ("Using BinarySearch-{0}: {1} not found" -f $Function, $Search) -ForegroundColor Red
|
|
}
|
|
}
|