Как можно (эффективно/быстро) определить ранжирование (элементов) вектора в C (не C++ или использование нестандартных библиотек)? Например, ранг (ing) вектора x=(0.25, 0.54, 0.38, 0.32, 0.49, 0.06, 0.41, 0.21, 0.98, 0.23)
должен быть rank(x)=(4, 9, 6, 5, 8, 1, 7, 2, 10, 3)
.Как вычислить ранг вектора в C?
Как следует из названия, «ранжирование» дает ранг каждого элемента вектора по отношению ко всем другим элементам вектора. Так rank(x[k])=l
означает, что k
й элемент x
является l
го наименьшим среди всех элементов в x
(например, для k=6
в приведенном выше примере, l
равен 1, то есть, 6-й элемент х является наименьшим). Обратите внимание, что такая функция rank()
существует в нескольких других языках программирования, но я еще не видел реализацию C. Я ищу чистую реализацию C, которая работает как можно быстрее для векторов целых чисел или действительных чисел.
* ха-ха *, хороший комментарий ... спасибо. Я скоро его обновлю. –
Сортируйте значения, их позиция будет их * rank - 1 *, используйте ['qsort (3)'] (http://man7.org/linux/man-pages/man3/qsort.3.html) –
. .. уверен, но qsort не позволяет передать второй вектор (индексов), который затем управляется соответствующим образом ... Кроме того, я не хороший программист на C, я хотел бы узнать у более опытных пользователей C здесь, как для этого. Я мог представить, что вы определяете какую-то структуру и работу над этим ... –