Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package code;
- import java.util.Scanner;
- /**
- * Дано натуральное число n и целочисленный массив из n чисел.
- * Нужно изменить порядок следования элементов с нечётными значениями на обратный.
- */
- public class ArrayTask {
- public static void main(String[] args) {
- /*Ввод данных с консоли*/
- Scanner consoleInput = new Scanner(System.in);
- System.out.print("Введите кол-во элементов массива: ");
- int n = consoleInput.nextInt();
- int array[] = new int[n];
- for(int i = 0; i < n; i++){
- System.out.printf("Введите %d-й элемент массива:", i+1);
- array[i] = consoleInput.nextInt();
- }
- /*
- * Основной алгоритм.
- * Суть: Нам нужно, чтобы четные элементы найденные в начале, поменялись с таковыми,
- * найденными в конце. Чтобы это сделать, создадим две "границы" - переменные a и b
- * Теперь перебираем элементы от начала к концу. Как только находим первый нечетный -
- * он становится нашей нижней границей уже отсортированного массива - границей a.
- * Ниже а проверять ничего не нужно. Потом ищем в обратном порядке, с конца массива,
- * где же будет верхняя граница - число b. Выше b тоже искать бессмысленно - туда помещаются
- * уже отсортированные элементы. Таким образом мы идём от концов массива к середине:
- * Допустим, есть массив [1 3 5 7]
- * Тогда a = 1 и b = 7
- * Меняем их местами, и получаем [7 3 5 1]
- * Так как алгоритм не включает a и b в последующие проверки, теперь работаем с оставшимися по-центру
- * элементами: 3 и 5. Их достаточно тоже поменять местами, чтобы получить [7 5 3 1] что от нас и требуется.
- */
- for(int i = 0, a = 0, b = n; i < n; i++){
- System.out.println("----------element#"+i+":"+array[i]+"----------");
- if(Math.abs(array[i] % 2) == 1){
- a = i;
- for(int j = b-1; j > a; j--){
- if(Math.abs(array[j] % 2) == 1){
- b = j;
- System.out.println("a="+a);
- System.out.println("b="+b);
- System.out.println(array[a]+"<=>"+array[b]);
- int temp = array[a];
- array[a] = array[b];
- array[b] = temp;
- break;
- }
- }
- }
- }
- /*Вывод результирующего массива*/
- System.out.print("Результирующий массив: ");
- for(int element: array) System.out.print(element);
- System.out.println();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement