Сортировка больших массивов примитивных типов в порядке убывания.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сортировка больших массивов примитивных типов в порядке убывания.

Сообщение Anonymous »

У меня есть большой массив примитивных типов (double).
Как отсортировать элементы в порядке убывания?К сожалению, Java API не поддерживает сортировку примитивных типов с помощью компаратора.
Первый подход, который, вероятно, приходит на ум, — это преобразовать его в список объектов (бокс):

Код: Выделить всё

double[] array = new double[1048576];
Arrays.stream(array).boxed().sorted(Collections.reverseOrder())…
Это решение, вероятно, достаточно хорошо для многих (или даже большинства) случаев использования, но упаковка каждого примитива в массиве слишком медленна и вызывает много ошибок. давления GC, если массив большой!
Другой подход — отсортировать, а затем перевернуть:

Код: Выделить всё

double[] array = new double[1048576];
...
Arrays.sort(array);
// reverse the array
for (int i = 0; i < array.length / 2; i++) {
// swap the elements
double temp = array[i];
array[i] = array[array.length - (i + 1)];
array[array.length - (i + 1)] = temp;
}

Этот подход также может быть слишком медленным, если массив уже отсортирован достаточно хорошо.
Какая альтернатива лучше, если массивы большие, а производительность является основной целью оптимизации?

Подробнее здесь: https://stackoverflow.com/questions/215 ... ding-order
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»