Сортирует как в примере
Пример ввода:
Вишня
1
Боб
3
Яблоко
22
0
Арбуз
Пример вывода:
Арбуз
22
Боб
3
Вишня
1
0
Яблоко
Но валидатор говорит надо исправить порядок сортировки строк.
Помогите разобраться и найти баг.package com.javarush.task.task09.task0930;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
/*
Задача по алгоритмам
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> list = new ArrayList<>();
while (true) {
String s = reader.readLine();
if (s.isEmpty()) break;
list.add(s);
}
String[] array = list.toArray(new String[0]);
sort(array);
for (String x : array) {
System.out.println(x);
}
}
public static void sort(String[] array) {
// напишите тут ваш код
ArrayList<Integer> nums = new ArrayList<>();
ArrayList<String> strs = new ArrayList<String>();
int iNum = 0, iStr = 0;
Integer[] iArr;// = new int[array.length];
String[] sArr;// = new String[array.length];
boolean[] isStrArr = new boolean[array.length];
for (int i = 0; i < array.length; i++) {
if (isNumber(array[i])) {
nums.add(Integer.parseInt(array[i]));
isStrArr[i] = false;
} else {
strs.add(array[i]);
isStrArr[i] = true;
}
}
iArr = nums.toArray(new Integer[0]);
Arrays.sort(iArr);
Arrays.sort(iArr, Collections.reverseOrder());
// String sorting
sArr = strs.toArray(new String[0]);
if (sArr.length !=0) {
strs = new ArrayList<>();// make empty list for sorting
strs.add(sArr[0]); // first element
for (int i = 1; i < sArr.length; i++) {
int j = strs.size() / 2;// begin from middle of list
// desigion upper or lower part of list
if (!isGreaterThan(strs.get(j), sArr[i])) {
do { // elem < new elem
if (!isGreaterThan(strs.get(j), sArr[i]) && j < strs.size()) {
j++;
if (j > strs.size() - 1) {
strs.add(sArr[i]);
break;
}
continue;
} else {
strs.add(j, sArr[i]);
break;
}
} while (j < strs.size());
} else {
do { // elem > new elem
if (isGreaterThan(strs.get(j), sArr[i]) && j >= 0) {
j--;
if (j < 0) {
strs.add(0, sArr[i]);
break;
}
continue;
} else {
strs.add(j, sArr[i]);
break;
}
} while (j >= 0);
}
}
}
// convert list to array for easy manipulation
sArr = strs.toArray(new String[0]);
// End String sort
// array merging keeping order
for (int i = 0, j = 0, k = 0; i < array.length; i++) {
if (isStrArr[i]) {
array[i] = sArr[j++];
} else {
array[i] = iArr[k++].toString();
}
}
}
// Метод для сравнения строк: 'а' больше чем 'b'
public static boolean isGreaterThan(String a, String b) {
return a.compareTo(b) > 0;
}
// Переданная строка - это число?
public static boolean isNumber(String s) {
if (s.length() == 0) return false;
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if ((i != 0 && c == '-') // Строка содержит '-'
|| (!Character.isDigit(c) && c != '-') // или не цифра и не начинается с '-'
|| (chars.length == 1 && c == '-')) // или одиночный '-'
{
return false;
}
}
return true;
}
}