Для теста взял таблицу из 32 значений. Сделал 32 итерации, так чтобы индекс каждый раз увеличивался на 1. В итоге оптимизированный варианта выиграл по скорости примерно 3 раза.
Если индекс не изменяется, то оптимизированный вариант проигрывает пока значение сидит в первых двух ячейках максимум в 1.5 раза, по следующим индексам уже начинает выигрывать.
Code: Select all
unsigned int find_index1(float *x, unsigned int n, float const s[])
{
if (*x <= s[0])
{
*x = s[0];
return 0;
}
n--;
if (*x >= s[n])
{
*x = s[n];
return n;
}
for (unsigned int i = 1; i <= n; i++)
{
if (*x < s[i])
{
return (i - 1);
}
}
}
unsigned int find_index2(float *x, unsigned int p, unsigned int n, float const s[])
{
if (*x <= s[0])
{
*x = s[0];
return 0;
}
n--;
if (*x >= s[n])
{
*x = s[n];
return n;
}
if (*x < s[p])
{
p--;
for (; p >= 0; p--)
{
if (*x >= s[p])
{
return p;
}
}
}
else
{
p++;
for (; p <= n; p++)
{
if (*x < s[p])
{
return (p - 1);
}
}
}
}