Skip to content

Commit 6ddf1de

Browse files
Added ExponentialSearch Algorithm
1 parent f23cabd commit 6ddf1de

File tree

4 files changed

+35
-3
lines changed

4 files changed

+35
-3
lines changed

Algorithms.NET.Debug/Program.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
Console.WriteLine(Algorithms.NET.Searching.TernarySearch.TernarySearchAlgorithm.Search(8, unsortedAsc));
1818
Console.WriteLine(Algorithms.NET.Searching.JumpSearch.JumpSearchAlgorithm.Search(0, unsortedAsc));
19+
Console.WriteLine(Algorithms.NET.Searching.ExponentialSearch.ExponentialSearchAlgorithm.Search(5, unsortedAsc));
1920

2021
//foreach (var item in sortedDesc)
2122
//{
@@ -35,7 +36,7 @@
3536
//}
3637

3738
//var sortingBenchmarkSummary = BenchmarkRunner.Run<SortingBenchmark>();
38-
//var searchingBenchmarkSummary = BenchmarkRunner.Run<SearchingBenchmark>();
39+
var searchingBenchmarkSummary = BenchmarkRunner.Run<SearchingBenchmark>();
3940

4041

4142

Algorithms.NET.Debug/SearchingBenchmark.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public SearchingBenchmark()
3737
public void TernarySearchRecursive() => Algorithms.NET.Searching.TernarySearch.TernarySearchAlgorithm.Search(0, _sortedList);
3838

3939
[Benchmark]
40-
public void JumpSearch() => Algorithms.NET.Searching.JumpSearch.JumpSearchAlgorithm.Search(0, _sortedList);
40+
public void JumpSearch() => Algorithms.NET.Searching.JumpSearch.JumpSearchAlgorithm.Search(10000, _sortedList);
41+
42+
[Benchmark]
43+
public void ExponentialSearch() => Algorithms.NET.Searching.ExponentialSearch.ExponentialSearchAlgorithm.Search(10000, _sortedList);
4144
}
4245
}

Algorithms.NET/Searching/BinarySearch/BinarySearchAlgorithm.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public static int SearchRecursive(double item, List<double> sortedList)
2525
/// <param name="endIndex">End index of searching.</param>
2626
/// <param name="startIndex">Start index of searching.</param>
2727
/// <returns>Index of item if found, Otherwise returns -1.</returns>
28-
private static int SearchRecursive(double item, List<double> sortedList, int startIndex, int endIndex)
28+
public static int SearchRecursive(double item, List<double> sortedList, int startIndex, int endIndex)
2929
{
3030
if (startIndex > endIndex)
3131
return -1;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace Algorithms.NET.Searching.ExponentialSearch
6+
{
7+
public class ExponentialSearchAlgorithm
8+
{
9+
/// <summary>
10+
/// Search an item in a list using ExponentialSearch algorithm, Time complexity of O(log i) where i is the position of the search key in the list.
11+
/// </summary>
12+
/// <param name="item">Item to search for</param>
13+
/// <param name="sortedList">Sorted list in which we want to search.</param>
14+
/// <returns>Index of item if found, Otherwise returns -1.</returns>
15+
public static int Search(double item, List<double> sortedList)
16+
{
17+
int bound = 1;
18+
19+
while(bound < sortedList.Count && sortedList[bound] < item)
20+
bound *= 2;
21+
22+
int start = bound / 2;
23+
int end = Math.Min(sortedList.Count - 1, bound);
24+
25+
return BinarySearch.BinarySearchAlgorithm.SearchRecursive(item,sortedList, start, end);
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)