В Thrust есть два типа сортировки. Существует радикальная сортировка и сравнительная сортировка. Для радикальной сортировки сложность работы составляет O (kN), где N - количество ключей, а k - длина ключа. Для сравнения, сложность работы O (N log N), как вы упомянули.
unique_by_key
- операция сжатия потока, что означает, что сложность работы составляет O (N).