Страницы

Поиск по вопросам

понедельник, 8 апреля 2019 г.

Сортировка массива. Нули, отрицательные, положительные

Имеется массив. Требуется осортировать его так, чтобы первые в массиве встали нули, после отрицательные, а самые последние оказались положительные цифры. Все это надо сделать в рамках одного массива


Ответ

Можно использовать такой вариант:
int a[] = {-8, 7, 0, 0, 6, 4, 17, -37, -178, -1, 0, 77}; a = IntStream.of(a).boxed().sorted( (x, y) -> x == 0 ? Integer.compare(x, Math.abs(y)) : y == 0 ? Integer.compare(Math.abs(x), y) : Integer.compare(x, y) ).mapToInt(Integer::intValue).toArray();
В случае, если один из аргументов равен нулю - сравнивать его с абсолютным значением другого аргумента. Таким образом нули будут в самом начале, а остальные значения будут отсортированы как обычно.
В случае, если не нужно сортировать числа в каждой из групп, можно воспользоваться более простым вариантом:
a = IntStream.of(a).boxed() .sorted(Comparator.comparing(i -> i == 0 ? -1 : i > 0 ? 1 : 0)) .mapToInt(Integer::intValue).toArray();

Комментариев нет:

Отправить комментарий