Created
August 24, 2024 13:33
-
-
Save m-jovanovic/1c2955de98d802eec7b1ea165c396107 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using BenchmarkDotNet.Attributes; | |
namespace BinarySearch.Benchmark; | |
[MemoryDiagnoser] | |
public class SearchBenchmark | |
{ | |
private static readonly int[] Numbers = Enumerable.Range(1, 1_000_000).ToArray(); | |
[Params(333_333, 777_777)] | |
public static int NumberToFind { get; set; } | |
[Benchmark] | |
public int BinarySearch_Bcl() | |
{ | |
var index = Array.BinarySearch(Numbers, NumberToFind); | |
return index; | |
} | |
[Benchmark] | |
public int BinarySearch() | |
{ | |
var index = BinarySearch(Numbers, NumberToFind); | |
return index; | |
} | |
[Benchmark] | |
public int BinarySearch_Shift() | |
{ | |
var index = BinarySearch_Shift(Numbers, NumberToFind); | |
return index; | |
} | |
private static int BinarySearch(int[] array, int numberToFind) | |
{ | |
int low = 0; | |
int high = array.Length - 1; | |
while (low <= high) | |
{ | |
int mid = low + (high - low) / 2; | |
if (array[mid] == numberToFind) | |
{ | |
return mid; | |
} | |
if (numberToFind < array[mid]) | |
{ | |
high = mid - 1; | |
} | |
else | |
{ | |
low = mid + 1; | |
} | |
} | |
return -1; | |
} | |
private static int BinarySearch_Shift(int[] array, int numberToFind) | |
{ | |
int low = 0; | |
int high = array.Length - 1; | |
while (low <= high) | |
{ | |
int mid = low + ((high - low) >> 1); | |
if (array[mid] == numberToFind) | |
{ | |
return mid; | |
} | |
if (numberToFind < array[mid]) | |
{ | |
high = mid - 1; | |
} | |
else | |
{ | |
low = mid + 1; | |
} | |
} | |
return -1; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment