Олимпиадное программирование

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Олимпиадное программирование » Java (Eclipse) » Сортировка массивов в яве


Сортировка массивов в яве

Сообщений 1 страница 3 из 3

1

В яве есть такой очень полезный класс java.util.Arrays, который содержит очень полезные методы для работы с массивами. Одним из таких методов является sort(), который позволяет сортировать что угодно и как угодно, для этого нужно лишь объяснить, каким образом мы хотим сравнивать лежащие в массиве объекты (именно объекты - простые типы данных sort умеет сортировать только по возрастанию).

Для того, чтобы объясниьт как мы хотим сравнивать между собой элементы массива, нам потребуется написать реализацию предназначенного для этого интерфейса java.util.Comparator. Этот интерфейс содержит метод public int compare(Object arg0, Object arg1), который должен возвращать
    1, если arg0>arg1
    0, если arg0=arg1
    -1, если arg0<arg1

Таким образом для того, чтобы отсортировать некий массив mass, нужно написать
    Arrays.sort(mass, new Comparator() {
        public int compare(Object arg0, Object arg1) {
        // TODO Здесь нужно написать требуемую реализацию этого метода
        return 0;
        }
    });

Вызывать метод sort можно и не передавая ему компоратор (передать только массив), в этом случае будет использван компоратор по умолчанию, скорее всего сортирующий в порядке возрастания. Для простых типов данных (int, long итп) этот метод можно вызывать только без компоратора.

Так же имеется возможность отсортровать элементы в массиве только с одного определенного индекса по другой. Для этого есть такие методы как
    Arrays.sort(Object[] mass, int fromIndex, int toIndex);
    Arrays.sort(Object[] mass, int fromIndex, int toIndex, Comparator comporator);

И еще в пяотй яве есть типизация, поэтому компаратор лучше делать типизированным (не надо будет кастить Object аргументы метода compare к используемым классам). Например:
    new Comparator<Integer>(){
        public int compare(Integer o1, Integer o2) {
        // TODO Auto-generated method stub
        return 0;
        }});

0

2

То есть отсортировать массив элементарных переменных (int, double) по убыванию не получится?

А если создать массив объектов, то сделать так? :

Integer mass[] = new Integer[] {1, 2, 3, 4, 5};
    Arrays.sort(mass, new Comparator<Integer>() {
    public int compare(Integer arg0, Integer arg1) {
        return -arg0.compareTo(arg1);
    }
    });

0

3

Ну да, наверно не получится. Вместо int, double итп можно использовать Integer или Double.

Ну да, эта штука будет массив Integer'ов по убыванию сортировать

0


Вы здесь » Олимпиадное программирование » Java (Eclipse) » Сортировка массивов в яве