Skip to content

Instantly share code, notes, and snippets.

@m-jovanovic
Created August 24, 2024 13:33
Show Gist options
  • Save m-jovanovic/1c2955de98d802eec7b1ea165c396107 to your computer and use it in GitHub Desktop.
Save m-jovanovic/1c2955de98d802eec7b1ea165c396107 to your computer and use it in GitHub Desktop.
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