Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.Laba3_3;
- import java.io.*;
- import java.util.Scanner;
- public class Main {
- public static Scanner in = new Scanner(System.in);
- static int getArraySize() {
- final int MAXSIZE = 101, MINSIZE = 1;
- boolean isCorrect = true;
- int sizeOfArray = 0;
- System.out.println("Введите количество элементов массива, число должно быть больше " + MINSIZE + " но меньше " + MAXSIZE);
- do {
- if (in.hasNextInt()) {
- sizeOfArray = in.nextInt();
- isCorrect = false;
- } else {
- System.out.println("Число должно быть целым!");
- }
- if (MINSIZE > sizeOfArray || MAXSIZE < sizeOfArray) {
- System.out.println("Проверьте границы допустимых значений");
- isCorrect = true;
- }
- } while (isCorrect);
- return sizeOfArray;
- }
- static int[] input(int sizeOfArray) {
- boolean isCorrect;
- int[] arrayOfInt = new int[sizeOfArray];
- System.out.println("Если ввод массива будет осуществляться с клавиатуры, напишите букву K, если из файла - букву F");
- do {
- isCorrect = true;
- String inputKeyboardOrFile = in.nextLine();
- switch (inputKeyboardOrFile) {
- case "K":
- arrayOfInt = getArrayFromKeyboard(sizeOfArray);
- isCorrect = false;
- break;
- case "F":
- arrayOfInt = getArrayFromFile(sizeOfArray);
- isCorrect = false;
- break;
- default:
- System.out.println("Введите, пожалуйста, K или F");
- }
- } while (isCorrect);
- return arrayOfInt;
- }
- static int[] getArrayFromKeyboard(int sizeOfArray) {
- final int
- MINNUMB = -51, MAXNUMB = 51;
- boolean isCorrect = true;
- int[] arrayOfInt = new int[sizeOfArray];
- int temp = sizeOfArray + 1;
- for (int i = 0; i < sizeOfArray; i++) {
- do {
- System.out.println("Введите " + i + " элемент массива. Он должен быть больше " + MINNUMB + " но меньше " + MAXNUMB);
- if (in.hasNextInt()) {
- arrayOfInt[i] = in.nextInt();
- isCorrect = false;
- } else {
- System.out.println("Число должно быть целым!");
- }
- if (arrayOfInt[i] < MINNUMB || arrayOfInt[i] > MAXNUMB) {
- isCorrect = true;
- System.out.println("Проверьте границы допустимых значений!");
- }
- } while (isCorrect);
- }
- return arrayOfInt;
- }
- static int[] getArrayFromFile(int sizeOfArray) {
- boolean isInvalidInput = true;
- String text = " ";
- int[] arrayOfInt = new int[sizeOfArray];
- do {
- isInvalidInput = false;
- System.out.println("Введите название файла, например C:\\Users\\Think\\Desktop\\Input.txt");
- String fileName = in.nextLine();
- try {
- BufferedReader input = new BufferedReader(new FileReader(fileName));
- text = input.readLine();
- input.close();
- String[] subStr = text.split(" ");
- for (int i = 0; i < subStr.length; i++) {
- arrayOfInt[i] = Integer.parseInt(subStr[i]);
- }
- } catch (FileNotFoundException e) {
- System.out.println("Такой файл не найден, попробуйте заново");
- isInvalidInput = true;
- } catch (IOException e) {
- System.out.println("Этот файл не может быть открыт, попробуйте заново");
- isInvalidInput = true;
- }
- } while (isInvalidInput);
- return arrayOfInt;
- }
- static int[] binarySorting(int[] arrayOfInt, int sizeOfArray) {
- int tempMinus, currentElement, leftSide, rightSide, middle, tempPlus;
- for (int i = 1; i < sizeOfArray; i++) {
- currentElement = arrayOfInt[i];
- leftSide = 0;
- rightSide = i - 1;
- while (leftSide <= rightSide) {
- middle = (leftSide + rightSide) / 2;
- tempPlus = middle + 1;
- tempMinus = middle - 1;
- if (currentElement < arrayOfInt[middle]) {
- rightSide = tempMinus;
- } else {
- leftSide = tempPlus;
- }
- }
- tempMinus = i - 1;
- for (int j = tempMinus; i > leftSide - 1; i--) {
- arrayOfInt[j + 1] = arrayOfInt[j];
- }
- arrayOfInt[leftSide] = currentElement;
- }
- return arrayOfInt;
- }
- static void output(int[] arrayOfInt, int sizeOfArray) {
- System.out.println("-------------------------------------------------------");
- System.out.println("Отсортированный массив:\n");
- int temp = sizeOfArray + 1;
- for (int i = 0; i < temp; i++) {
- System.out.print(arrayOfInt[i] + " ");
- }
- System.out.println("\n");
- System.out.println("-------------------------------------------------------");
- System.out.println("Вы хотите записать результат в файл? Если да - введите Y, если нет - введите N ");
- boolean isCorrect = true;
- do {
- String chooseOutput = in.nextLine();
- switch (chooseOutput) {
- case "Y":
- saveToFile(arrayOfInt, sizeOfArray);
- System.out.println("Результат был записан в файл");
- isCorrect = false;
- break;
- case "N":
- System.out.println("Результат не был записан в файл");
- isCorrect = false;
- break;
- default:
- System.out.println("Пожалуйста, введите Y или N");
- }
- } while (isCorrect);
- }
- static void saveToFile(int[] arrayOfInt, int sizeOfArray) {
- System.out.println("Введите, пожалуйста, путь к файлу, например: C:\\Users\\Think\\Desktop\\Output.txt");
- String path = in.nextLine();
- try (FileWriter writer = new FileWriter(path, false)) {
- writer.write("Отсортированный массив:");
- int temp = sizeOfArray + 1;
- for (int i = 0; i < temp; i++) {
- writer.write(arrayOfInt[i] + " ");
- }
- } catch (IOException e) {
- System.out.println("Файл невозможно открыть");
- }
- }
- public static void main(String[] args) {
- System.out.println("Эта программа выполняет сортировку массива бинарными вставками");
- int sizeOfArray = getArraySize();
- int[] arrayOfInt = input(sizeOfArray);
- System.out.println("\n");
- binarySorting(arrayOfInt, sizeOfArray);
- output(arrayOfInt, sizeOfArray);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement