klasscho

laba 3.3

Mar 22nd, 2020
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.49 KB | None | 0 0
  1. package com.company;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.util.NoSuchElementException;
  5. import java.util.Scanner;
  6.  
  7. public class Main {
  8.     public static void main(String[] args){
  9.         System.out.println("\n Данная программа расставляет массив натуральных чисел по количеству их делителей с использованием шейкерной сортировки.\n");
  10.         try {
  11.             int [] dividerArr = inputArray();
  12.             if (dividerArr == null){
  13.                 return;
  14.             }
  15.             int [] array = inputArray();
  16.             if (array == null){
  17.                 return;
  18.             }
  19.             amountOfDividers(array, dividerArr);
  20.             System.out.println("\nДанный массив: ");
  21.             outputArray(array);
  22.             System.out.println("\nДелители:");
  23.             outputArray(dividerArr);
  24.             shakerSort(array, dividerArr);
  25.             System.out.println("\nНовый массив:");
  26.             outputArray(array);
  27.             System.out.println("\nДелители:");
  28.             outputArray(dividerArr);
  29.         } catch (ArrayIndexOutOfBoundsException e){
  30.             System.out.println("\nОшибка. Выход за рамки массива. Возможно в массиве находится отрицательное число");
  31.         } catch (Exception e) {
  32.             e.printStackTrace();
  33.         }
  34.  
  35.     }
  36.     public static int[] inputArray() {
  37.         try {
  38.             File fileInput = new File("C:\\Users\\KaMo.by Admin\\Desktop\\Sort.txt");
  39.             Scanner input = new Scanner(fileInput);
  40.  
  41.             int size = input.nextInt();
  42.             int[] array = new int[size];
  43.  
  44.             for (int i = 0; i < size; i++) {
  45.                 array[i] = input.nextInt();
  46.             }
  47.             return array;
  48.         } catch (FileNotFoundException e){
  49.             System.out.println("\nОшибка. Читаемого файла не существует или неверное имя файла.\n");
  50.             return null;
  51.         } catch (NoSuchElementException e){
  52.             System.out.println("\nОшибка. Невозможно прочитать массив в файле. \n" + "Возможно записанная длина массива несовпадает в действительной \n" + "или в массиве записаны не числа, а символы.");
  53.             return null;
  54.         }
  55.     }
  56.  
  57.     public static void outputArray (int[] array){
  58.         for (int i = 0; i < array.length; i++){
  59.             System.out.print(array[i] + " ");
  60.         }
  61.         System.out.println();
  62.     }
  63.  
  64.     public static void amountOfDividers(int[] array, int[] dividerArray){
  65.         int count = 0;
  66.         for (int i = 0; i < array.length; i++){
  67.             for (int j = 1; j < Math.abs(array[i]); j++ ){
  68.                 if (array[i] % j == 0){
  69.                     count++;
  70.                 }
  71.             }
  72.             dividerArray[i] = count*2;
  73.             count = 0;
  74.         }
  75.     }
  76.  
  77.     public static void swipe(int[] array, int i, boolean correctChange){
  78.         int tempValue;
  79.         if (correctChange) {
  80.             tempValue = array[i];
  81.             array[i] = array[i+1];
  82.             array[i+1] = tempValue;
  83.         }else{
  84.             tempValue = array[i];
  85.             array[i] = array[i-1];
  86.             array[i-1] = tempValue;
  87.         }
  88.     }
  89.  
  90.     public static void shakerSort(int[] dividerArr, int[] array){
  91.         int firstInd = 1;
  92.         int lastInd = array.length - 1;
  93.         do {
  94.             for (int i = firstInd; i < lastInd; i++) {
  95.                 if (dividerArr[i] > dividerArr[i + 1]) {
  96.                     swipe(dividerArr, i, true);
  97.                     swipe(array, i, true);
  98.                 }
  99.             }
  100.             lastInd--;
  101.             for (int i = lastInd; i >= firstInd; i--) {
  102.                 if (dividerArr[i] < dividerArr[i - 1]) {
  103.                     swipe(dividerArr, i, false);
  104.                     swipe(array, i, false);
  105.                 }
  106.  
  107.             }
  108.             firstInd++;
  109.         }while (firstInd < lastInd);
  110.         for (int i = 0; i < array.length; i++) {
  111.             if (array[i] == 0) {
  112.                 for (int j = i + 1; j < array.length; j++) {
  113.                     swipe(dividerArr, j, false);
  114.                     swipe(array, j, false);
  115.                 }
  116.             }
  117.         }
  118.  
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment