Хочу ускорить программу встраивая bsearch, т.к. не первый раз делаю bsearch. Задача такая - есть массив чисел. Есть длинна массива. Есть искомое число. Нужно получить номер в массиве, если такого нету - то ближайшее слева или справа. Я приведу свой вариант, но... возможно есть вариант получше.
int q = 0;
int i,L,R;
int window_sizes[] = {0,4,8,12,16,64,128,256,512,1024,4096,8192,16384 };
R = sizeof(window_sizes)/sizeof(window_sizes[0]);
while (L < R) {
i = L+ ((R-L)>>1);//Середина диапазона
if ( window_sizes[i] > q) R = i; // Переходим влево
else {
if (window_sizes[i] == q) break;
L = i; // Переходим вправо
}
}
В итоге хочу создать макрос и использовать его везде.
Напомню.. bsearch - двоичный поиск. Метод поиска в упорядоченом массиве с названием поиск методом половинного деления. Т.е. (коротко) сравниваем искомое с числом посередине диапазона, если меньше - переходим к сравнению в левом диапазоне (с тем которое посередине левого диапазона), иначе справа... и так далее. В отличии от линейного поиска - сокращает среднее время поиска во много раз.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости