Как быстрее всего отсортировать 4 float-a

85
03 декабря 2020, 22:20

Какой алгоритм будет самым оптимальным ? На вход массив из 4 float , а на выходе отсортированный.

Дополнение:

Есть прямоугольник, который можно вращать и прямая, выходящая из его центра. Определить какую сторону пересекает. Есть 4 критических угла( так как период два пи, а я использую единичную окружность, то максимальный угол прямой к оси X может быть 5.9999999.. пи, а вот один из критических углов больше двух пи (например третий угол, там примерно 1.2 пи, и я поверну прямоугольник на 1.5 пи, то придется отнять от критического угла 2 пи, чтобы сравнивать с прямой) Проверку хочу сделать такой

if (lineAngle > angles[3]) 
            std::cout << "RIGHT"; 
        else if (lineAngle > angles[2]) 
            std::cout << "TOP"; 
        else if (lineAngle > angles[1]) 
            std::cout << "LEFT"; 
        else if (lineAngle > angles[0]) 
            std::cout << "DOWN";

Answer 1
void sort_swap(float&a, float& b)
{
    if (b < a) ::swap(a,b);
}
sort_swap(a[0],a[1]);
sort_swap(a[2],a[3]);
sort_swap(a[0],a[2]);
sort_swap(a[1],a[3]);
sort_swap(a[1],a[2]);

Вот такой набросок на коленке. Не компилировал. Идея понятна, но для пущей эффектности можно расписать без вызовов функций, хотя, думаю, оптимизирующий компилятор и сам все сделает...

Исходя из того, что log2(4!) ~ 4.58, меньше 5 сравнений в общем случае не получится.

READ ALSO
Инициализация unique_ptr

Инициализация unique_ptr

Нужно объявить и инициализировать unique_ptrОн должен указывать на структуру

98
Не собирается iio модуль

Не собирается iio модуль

Разбираюсь в libiio, пытаюсь написать условный Hello world модуль (упростил до одной строчки)

107
Умные указатели и утечка памяти

Умные указатели и утечка памяти

Изучаю умные указатели и абстрактные базовые классы

110
Не работает часть стилей

Не работает часть стилей

всем неравнодушным! Заранее благодарю за помощь или желание помочьЕсть сайт: https://lucklife-business

111