to wygląda na zwykłe https://pl.wikipedia.org/wiki/Wyszukiwanie_binarne - z tym że nie szukamy konkretnej wartości tylko przedziału
Skoro masz ciąg rosnący czyli posortowaną tablicę to nie potrzebujesz przeszukiwać wszystkich par elementów, wystarczy że będziesz rekurencyjnie dzielił przedział na pół i znajdziesz maksymalną wartość mniejszą od x. wystarczy zmienić w algorytmie warunek końca na:
tablica[przeszukiwany_indeks] <= szukana && tablica[przeszukiwany_indeks + 1] > szukana
i poprawić resztę warunków i dodać obsługę wartości skrajnych.
W rzeczywistości nie musiałbyś w ogóle nic pisać. W .NET masz funkcję Array.BinarySearch
która zachowuje się dokładnie tak jak chcesz - gdy jest znaleziona konkretna wartość to dostajesz indeks tej wartości - wtedy szukany przedział to a[i], a[i+1]
Jeśli nie jest znaleziona konkretna wartość to zwracana jest ujemna wartość która wskazuje na odwrócony bitowo indeks wartości gdzie wstawilibyśmy naszą wartość gdybyśmy ją mieli
var a = new[] { 1, 3, 4, 6, 9};
var x = 5;
var i= Array.BinarySearch(a, x);
if (i < -1) // musisz osobno obsłużyć wartości skrajne (pierwszy i ostatni indeks) żeby nie wykroczyć za tablicę
{
Console.WriteLine("Szukany przedzial to " + a[~i- 1] + " - " + a[~i]); // Szukany przedzial to 4 - 6
}