Помогите! Сортировка массива на чет-нечет методом пузырька.

 
 
 
Сообщения:3
Ребята, добрый день! Помогите пожалуйста отсортировать массив на сначала чётные в порядке убывания, а потом не чётные в порядке убывания методом пузырька. Первое задание на сортировку массива от большего к меньшему я сделал, а вот с чёт-нечет запутался совсем.
public class HomeWork_09_08 {

public static void main(String[] args) {
int[] ar = { 20, 11, 10, 19, 12, 14, 18, 16, 13, 17, 15 };
minToEnd(ar);
sortBubble(ar);
for (int x : ar) {
System.out.print(x + " ");
}
evenToEnd(ar);
for (int e : ar) {
System.out.print(e + " ");
}

}

public static boolean minToEnd(int[] ar) {
int temp = 0;
boolean res = false;
for (int i = 0; i < ar.length - 1; i++) {
if (ar[i] < ar[i + 1]) {
temp = ar[i];
ar[i] = ar[i + 1];
ar[i + 1] = temp;
res = true;
}
}
return res;
}

public static void sortBubble(int[] ar) {
boolean res = false;
do {
res = minToEnd(ar);
} while (res != false);
}
// Ниже в методе запутался совсем. Наверное нужно было задать %2, чтобы найти нечетные числа?
//Нужно сделать таким же методом как написал выше, только чтобы сначала на консоле вывелись чётные числа по убыванию, а за ними нечётные по убыванию
//20 18 16 14 12 10 19 17 15 13 11 - такой должен быть результат

public static boolean evenToEnd(int[] ar) {
int temp = 0;
boolean res = false;
for (int i = 0; i < ar.length - 1; i++) {
if (ar[i] < ar[i + 1]) {
temp = ar[i];
ar[i] = ar[i + 1];
ar[i + 1] = temp;
res = true;
}
}
}
}
 
 
Сообщения:3
Вот, вроде бы получилось отсортировать на чёт и нечет, а как сделать, чтобы они по убыванию были?
20 18 16 14 12 10 19 17 15 13 11 - такой должен быть результат

public static boolean evenToEnd(int[] ar) {
boolean res = false;
int left = 0, right = ar.length - 1;
while (left < right) {
while (ar[left] % 2 == 0 && left < right)
left++;
while (ar[right] % 2 == 1 && left < right)
right--;
if (left < right) {
int temp = ar[left];
ar[left] = ar[right];
ar[right] = temp;
left++;
right--;
res = true;
}
}
return res;
}
 
 
Сообщения:1
Я только учусь, но получилось вот так:

public class TestForLessons {
    
    public static void main(String[] args) {

        int[] ar = {20, 11, 10, 19, 12, 14, 18, 16, 13, 17, 15};
        TestForLessons test = new TestForLessons();

        test.printThisShit(ar);
        System.out.print("\n");
        test.booble(ar);
        test.printThisShit(ar);
        System.out.print("\n");
        ar = test.boobleTwo(ar);
        test.printThisShit(ar);
    }
    
    public void booble(int[] ar) {
        int temp = 0;
        for(int i = 0; i < ar.length - 1; i++) {
            for(int j = 0; j < ar.length - 1 - i; j++) {
                    if (ar[j] < ar[j + 1]) {
                        temp = ar[j + 1];
                        ar[j + 1] = ar[j];
                        ar[j] = temp;
                }
            }
        }
    }

    public int[] boobleTwo(int[] ar) {
        int[] arTwo = new int[ar.length];
        int count = 0;
        for(int i = 0; i < ar.length; i++) {
            if((ar[i] % 2) == 0) {
                arTwo[count] = ar[i];
                count++;
            }
        }
        for(int i = 0; i < ar.length; i++) {
            if((ar[i] % 2) != 0 ) {
                arTwo[count] = ar[i];
                count++;
            }
        }
    return arTwo;
    }
    
    public void printThisShit(int[] ar) {
        for(int i = 0; i < ar.length; i++) {
            System.out.print(ar[i] + " ");
        }
    }
}


Кидай сюда еще задачи, интересно будет порешать. Так же готов выслушать критику к моему решению.
 
Модераторы:frymock
Сейчас эту тему просматривают:Нет