Поменять местами элементы из массива

207
28 января 2019, 06:20

Есть массив:

int[] arr = {1,5,7,4,2};

Нужно отсортировать элементы четные и не четные. На пример этот массив должен выглядеть вот так:

int[] arr = {1,2,5,4,7};

Если первый элемент четный, тогда второй должен быть нечетным. Есть код, который определяет четные и не четные цифры:

int odd = 0;
    int even = 0;
    System.out.println("odd");
    for (int i = 0; i < array.length; i++) {
        if (array[i] % 2 == 1) {
            odd = array[i];
            System.out.println(odd);
        }
    }
    System.out.println("even");
    for (int j = 0; j < array.length; j++) {
        if (array[j] % 2 == 0){
            even = array[j];
        }
        System.out.println(even);
    }
    }

И есть код, который меняет местами цифры:

 private static void swap(int[] array, int i, int j) {
    int tmp = array[i];
    array[i] = array[j];
    array[j] = tmp;
}

Куда и каким образом надо вызвать этот метод для получения результата?

Answer 1

А вот такой вариант подойдет?

static class CompareByInt implements Comparator<Integer>{
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1-o2;
    }
}
public static void main(String[] args) {
    int[] array = {1,5,7,4,2};
    System.out.println(Arrays.toString(array));
    ArrayList<Integer> Odd = new ArrayList<>();
    ArrayList<Integer> Even = new ArrayList<>();
    for (int i = 0; i < array.length; i++) {
        if (array[i] % 2 == 1) {
            Odd.add(array[i]);
        }
    }
    for (int j = 0; j < array.length; j++) {
        if (array[j] % 2 == 0){
            Even.add(array[j]);
        }
    }
    Odd.sort(new CompareByInt());
    Even.sort(new CompareByInt());
    ArrayList<Integer> start;
    ArrayList<Integer> second;
    if(Odd.size()>Even.size()){
        start = Odd;
        second = Even;
    } else {
        start = Even;
        second = Odd;
    }
    int len = start.size() + second.size();
    ArrayList<Integer> result = new ArrayList<>(len);
    int index = 0;
    while (index<len){
        if(index%2==0){
            result.add(start.remove(0));
        } else {
            result.add(second.remove(0));
        }
        index++;
    }
    System.out.println(result);
}

Или вам именно надо весь процесс сортировки сделать самому?

READ ALSO
Методы jsp страницы, переопределение init()

Методы jsp страницы, переопределение init()

Страница jsp компилируется в сервлетУ нее есть методы jspInit(), jspService(HttpServletRequest, HttpServletResponse), jspDestroy()

192
Как изменять ImageView из другого класса?

Как изменять ImageView из другого класса?

Есть MainActivityjava с activity_main

152
&hellip; build.gradle

… build.gradle

Что может быть причиной, того, что в проекте только один buildgradle вместо двух

207