Проблемы: Consder следующих поплавков []:Java массив сортировка: Быстрый способ получить отсортированный список индексов массива
d[i] = 1.7 -0.3 2.1 0.5
То, что я хочу является массивом междунара [], что представляет собой порядок исходного массива с индексами.
s[i] = 1 3 0 2
d[s[i]] = -0.3 0.5 1.7 2.1
Конечно, это может быть сделано с помощью пользовательского компаратора, отсортированного набора пользовательских объектов, или просто сортировки массива, а затем искать для индексов в исходном массиве (содрогания).
То, что я на самом деле ищу, эквивалентно второму аргументу возврата Matlab's sort function.
Есть ли простой способ сделать это (< 5 LOC)? Может ли быть решение, которому не нужно выделять новый объект для каждого элемента?
Update:
Спасибо за ваши ответы. К сожалению, ни одно из предложенных до сих пор не похоже на простое и эффективное решение, на которое я надеялся. Поэтому я открыл тему в форуме обратной связи JDK, предложив добавить новую функцию класса-библиотеки для решения этой проблемы. Посмотрим, что Sun/Oracle думает о проблеме.
http://forums.java.net/jive/thread.jspa?threadID=62657&tstart=0
, даже если это были введены в JDK, то я очень сомневаюсь, что когда-нибудь случится, это будет в конечном итоге статический метод полезности от класса Массивы (или нечто подобное) и будет в конечном итоге реализуется очень похожи что-то внизу. Так почему вы не можете просто написать функцию? – Jherico
В чем проблема с обычным компаратором в качестве решения? Возможно, я не понимаю подход, который это подразумевает в вашем уме. – jerryjvl
Возможно, я не выгляжу достаточно тяжело, но для того, что я знаю, нет никакого способа использовать Компаратор без бокса каждый элемент при каждом вызове Компаратора. Для массива n float, который будет означать 2 * n * log (n) Поплавки для сборщика мусора. При n = 10000 это означает 80000 единиц мусора. Я бы предпочел статический метод утилиты в классе Arrays. Если бы я не заботился о мусоре, я мог бы использовать TreeMap или что-то в первую очередь. –