Страницы

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

пятница, 31 января 2020 г.

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

#java


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


Ответы

Ответ 1



Можно использовать такой вариант: 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();

Ответ 2



https://ideone.com/QHVX8e /* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { Integer a[] = {-8, 7, 0, 0, 6, 4, 17, -37, -178, -1, 0, 77 }; Arrays.sort(a, (x, y) -> x==0 ? y==0 ? 0 : -1 : x<0 ? y<0 ? 0 : y==0 ? 1 : -1 : y>0 ? 0 : 1); System.out.println(Arrays.toString(a)); } }

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

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