Ответ 1
Да, это возможно. Для правильной обработки отрицательных значений требуется дополнительный проход. Статьи Pierre Terdiman и Майкл Херф подробно обсуждают, как для его реализации. Короче говоря, вы конвертируете float в целое число без знака, сортируете их и затем конвертируете обратно в float (это необходимо, иначе отрицательные значения будут некорректно отсортированы после положительных).
Их метод имеет то преимущество, что вы не вводите никаких ошибок в свои данные (при условии, что ваш процессор хранит поплавок в соответствии со стандартом IEEE 754).