Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.67 KB | None | 0 0
  1. package com.javarush.task.task09.task0930;
  2.  
  3.  
  4. import java.io.BufferedReader;
  5. import java.io.InputStreamReader;
  6. import java.util.ArrayList;
  7.  
  8. /*
  9. Задача по алгоритмам
  10. */
  11.  
  12. public class Solution {
  13.     public static void main(String[] args) throws Exception {
  14.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  15.         ArrayList<String> list = new ArrayList<>();
  16.         while (true) {
  17.             String s = reader.readLine();
  18.             if (s.isEmpty()) {
  19.                 break;
  20.             }
  21.             list.add(s);
  22.         }
  23.  
  24.         String[] array = list.toArray(new String[0]);
  25.         sort(array);
  26.  
  27.         for (String x : array) {
  28.             System.out.println(x);
  29.         }
  30.     }
  31.  
  32.     public static void sort(String[] array) {
  33.         ArrayList<Integer> numbers = new ArrayList<>();
  34.         ArrayList<String> strings = new ArrayList<>();
  35.         for (int i = 0; i < array.length ; i++) {
  36.             String str = array[i];
  37.             if (isNumber(str))
  38.                 numbers.add(Integer.parseInt(str));
  39.             else
  40.                 strings.add(str);
  41.         }
  42.         String[] strArray = new String[strings.size()];
  43.         for (int i = 0; i < strings.size(); i++) {
  44.             strArray[i] = strings.get(i);
  45.         }
  46.         //-------------------------------------------------------
  47.         int[] numbersArray = new int[numbers.size()];
  48.         for (int i = 0; i <numbers.size(); i++) {
  49.             numbersArray[i] = numbers.get(i);
  50.         }
  51.         for (int i = 0; i < strArray.length ; i++) { // OK
  52.             String strRight = strArray[i];
  53.             for (int j = i - 1; j >= 0 ; j--) {
  54.                 String strLeft = strArray[j];
  55.                 if (isGreaterThan(strLeft, strRight)) {
  56.                     strArray[j+1] = strLeft;
  57.                     strArray[j] = strRight;
  58.                 }
  59.             }
  60.         }
  61.         for (int i = 0; i < numbersArray.length; i++) {
  62.             int rightNumbers = numbersArray[i];
  63.             for (int j = i - 1; j >= 0 ; j--) {
  64.                 int leftNumbers = numbersArray[j];
  65.                 if (leftNumbers < rightNumbers) {
  66.                     numbersArray[j + 1] = leftNumbers;
  67.                     numbersArray[j] = rightNumbers;
  68.                 }
  69.             }
  70.         }
  71.         //----------------------------------------------------
  72.         String[] fromNumtoString = new String[numbersArray.length];
  73.         for (int i = 0; i < numbersArray.length; i++) {
  74.             fromNumtoString[i] = String.valueOf(numbersArray[i]);
  75.         }
  76.         int num = 0;
  77.         int str = 0;
  78.         for (int i = 0; i < array.length; i++) {
  79.  
  80.             if (isNumber(array[i])) {
  81.                 array[i] = fromNumtoString[num];
  82.                 num++;
  83.             }
  84.             else {
  85.                 array[i] =strArray[str];
  86.                 str++;
  87.             }
  88.         }
  89.     }
  90.  
  91.     // Метод для сравнения строк: 'а' больше чем 'b'
  92.     public static boolean isGreaterThan(String a, String b) {
  93.         return a.compareTo(b) > 0;
  94.     }
  95.  
  96.  
  97.     // Переданная строка - это число?
  98.     public static boolean isNumber(String s) {
  99.         if (s.length() == 0) {
  100.             return false;
  101.         }
  102.  
  103.         char[] chars = s.toCharArray();
  104.         for (int i = 0; i < chars.length; i++) {
  105.             char c = chars[i];
  106.             if ((i != 0 && c == '-') // Строка содержит '-'
  107.                     || (!Character.isDigit(c) && c != '-') // или не цифра и не начинается с '-'
  108.                     || (chars.length == 1 && c == '-')) // или одиночный '-'
  109.             {
  110.                 return false;
  111.             }
  112.         }
  113.         return true;
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement