Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.util.NoSuchElementException;
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args){
- System.out.println("\n Данная программа расставляет массив натуральных чисел по количеству их делителей с использованием шейкерной сортировки.\n");
- try {
- int [] dividerArr = inputArray();
- if (dividerArr == null){
- return;
- }
- int [] array = inputArray();
- if (array == null){
- return;
- }
- amountOfDividers(array, dividerArr);
- System.out.println("\nДанный массив: ");
- outputArray(array);
- System.out.println("\nДелители:");
- outputArray(dividerArr);
- shakerSort(array, dividerArr);
- System.out.println("\nНовый массив:");
- outputArray(array);
- System.out.println("\nДелители:");
- outputArray(dividerArr);
- } catch (ArrayIndexOutOfBoundsException e){
- System.out.println("\nОшибка. Выход за рамки массива. Возможно в массиве находится отрицательное число");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static int[] inputArray() {
- try {
- File fileInput = new File("C:\\Users\\KaMo.by Admin\\Desktop\\Sort.txt");
- Scanner input = new Scanner(fileInput);
- int size = input.nextInt();
- int[] array = new int[size];
- for (int i = 0; i < size; i++) {
- array[i] = input.nextInt();
- }
- return array;
- } catch (FileNotFoundException e){
- System.out.println("\nОшибка. Читаемого файла не существует или неверное имя файла.\n");
- return null;
- } catch (NoSuchElementException e){
- System.out.println("\nОшибка. Невозможно прочитать массив в файле. \n" + "Возможно записанная длина массива несовпадает в действительной \n" + "или в массиве записаны не числа, а символы.");
- return null;
- }
- }
- public static void outputArray (int[] array){
- for (int i = 0; i < array.length; i++){
- System.out.print(array[i] + " ");
- }
- System.out.println();
- }
- public static void amountOfDividers(int[] array, int[] dividerArray){
- int count = 0;
- for (int i = 0; i < array.length; i++){
- for (int j = 1; j < Math.abs(array[i]); j++ ){
- if (array[i] % j == 0){
- count++;
- }
- }
- dividerArray[i] = count*2;
- count = 0;
- }
- }
- public static void swipe(int[] array, int i, boolean correctChange){
- int tempValue;
- if (correctChange) {
- tempValue = array[i];
- array[i] = array[i+1];
- array[i+1] = tempValue;
- }else{
- tempValue = array[i];
- array[i] = array[i-1];
- array[i-1] = tempValue;
- }
- }
- public static void shakerSort(int[] dividerArr, int[] array){
- int firstInd = 1;
- int lastInd = array.length - 1;
- do {
- for (int i = firstInd; i < lastInd; i++) {
- if (dividerArr[i] > dividerArr[i + 1]) {
- swipe(dividerArr, i, true);
- swipe(array, i, true);
- }
- }
- lastInd--;
- for (int i = lastInd; i >= firstInd; i--) {
- if (dividerArr[i] < dividerArr[i - 1]) {
- swipe(dividerArr, i, false);
- swipe(array, i, false);
- }
- }
- firstInd++;
- }while (firstInd < lastInd);
- for (int i = 0; i < array.length; i++) {
- if (array[i] == 0) {
- for (int j = i + 1; j < array.length; j++) {
- swipe(dividerArr, j, false);
- swipe(array, j, false);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment