Advertisement
teaowl

Array Sorting Algorythm

Jan 14th, 2020
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.53 KB | None | 0 0
  1. package code;
  2.  
  3. import java.util.Scanner;
  4.  
  5. /**
  6.  * Дано натуральное число n и целочисленный массив из n чисел.
  7.  * Нужно изменить порядок следования элементов с нечётными значениями на обратный.
  8.  */
  9. public class ArrayTask {
  10.     public static void main(String[] args) {
  11.         /*Ввод данных с консоли*/
  12.         Scanner consoleInput = new Scanner(System.in);
  13.         System.out.print("Введите кол-во элементов массива: ");
  14.         int n = consoleInput.nextInt();
  15.         int array[] = new int[n];
  16.         for(int i = 0; i < n; i++){
  17.             System.out.printf("Введите %d-й элемент массива:", i+1);
  18.             array[i] = consoleInput.nextInt();
  19.         }
  20.        
  21.         /*
  22.         * Основной алгоритм.
  23.         * Суть: Нам нужно, чтобы четные элементы найденные в начале, поменялись с таковыми,
  24.         * найденными в конце. Чтобы это сделать, создадим две "границы" - переменные a и b
  25.         * Теперь перебираем элементы от начала к концу. Как только находим первый нечетный -
  26.         * он становится нашей нижней границей уже отсортированного массива - границей a.
  27.         * Ниже а проверять ничего не нужно. Потом ищем в обратном порядке, с конца массива,
  28.         * где же будет верхняя граница - число b. Выше b тоже искать бессмысленно - туда помещаются
  29.         * уже отсортированные элементы. Таким образом мы идём от концов массива к середине:
  30.         * Допустим, есть массив [1 3 5 7]
  31.         * Тогда a = 1 и b = 7
  32.         * Меняем их местами, и получаем [7 3 5 1]
  33.         * Так как алгоритм не включает a и b в последующие проверки, теперь работаем с оставшимися по-центру
  34.         * элементами: 3 и 5. Их достаточно тоже поменять местами, чтобы получить [7 5 3 1] что от нас и требуется.
  35.         */
  36.         for(int i = 0, a = 0, b = n; i < n; i++){
  37.             System.out.println("----------element#"+i+":"+array[i]+"----------");
  38.             if(Math.abs(array[i] % 2) == 1){
  39.                 a = i;
  40.                 for(int j = b-1; j > a; j--){
  41.                     if(Math.abs(array[j] % 2) == 1){
  42.                         b = j;
  43.                         System.out.println("a="+a);
  44.                         System.out.println("b="+b);
  45.                         System.out.println(array[a]+"<=>"+array[b]);
  46.                         int temp = array[a];
  47.                         array[a] = array[b];
  48.                         array[b] = temp;
  49.                         break;
  50.                     }
  51.                 }
  52.             }
  53.         }
  54.        
  55.         /*Вывод результирующего массива*/
  56.         System.out.print("Результирующий массив: ");
  57.         for(int element: array) System.out.print(element);
  58.         System.out.println();
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement