Вначале написал решение с использованием Collections. В коментария начитался что так не годится. Заморочился на 2 дня с пузырьковой сортировкой. Вышло очень громоздко, но зато делает что чесно как в задачи. Но валидатор не принимает. Помогите найти решение. Спасибо
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) {
int[] intArray = new int[array.length];
String[] stringArray = new String[array.length];
for (int i = 0, intIndex = 0, strIndex = 0; i < array.length; i++) {
if (isNumber(array[i])) {
intArray[intIndex] = Integer.parseInt(array[i]);
intIndex++;
} else {
stringArray[strIndex] = array[i];
strIndex++;
}
}
// bubble sort int
int j;
boolean flag = true;
int temp;
while (flag) {
flag = false;
for (j = 0; j < intArray.length - 1; j++) {
if (intArray[j] < intArray[j + 1]) {
temp = intArray[j];
intArray[j] = intArray[j + 1];
intArray[j + 1] = temp;
flag = true;
}
}
}
//bubble sort string
int s;
boolean flag2 = true;
String tempString;
while (flag2) {
flag2 = false;
for (s = 0; s < stringArray.length - 2; s++) {
if (stringArray[s + 1] != null) {
if (isGreaterThan(stringArray[s], stringArray[s + 1])) {
tempString = stringArray[s];
stringArray[s] = stringArray[s + 1];
stringArray[s + 1] = tempString;
}
}
}
}
for (int i = 0, intInde = 0, stringInde = 0; i < array.length; i++) {
if (isNumber(array[i])) {
array[i] = String.valueOf(intArray[intInde]);
intInde++;
} else {
array[i] = stringArray[stringInde];
stringInde++;
}
}
}
// Метод для сравнения строк: 'а' больше чем '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;
}
}
package com.javarush.task.task09.task0930;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
Задача по алгоритмам
*/
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) {
int[] intArray = new int[array.length];
String[] stringArray = new String[array.length];
for (int i = 0, intIndex = 0, strIndex = 0; i < array.length; i++) {
if (isNumber(array[i])) {
intArray[intIndex] = Integer.parseInt(array[i]);
intIndex++;
} else {
stringArray[strIndex] = array[i];
strIndex++;
}
}
// bubble sort int
int j;
boolean flag = true;
int temp;
while (flag) {
flag = false;
for (j = 0; j < intArray.length - 1; j++) {
if (intArray[j] < intArray[j + 1]) {
temp = intArray[j];
intArray[j] = intArray[j + 1];
intArray[j + 1] = temp;
flag = true;
}
}
}
//bubble sort strint
int s;
boolean flag2 = true;
String tempString;
while (flag2) {
flag2 = false;
for (s = 0; s < stringArray.length - 1; s++) {
if (stringArray[s + 1] != null) {
if (isGreaterThan(stringArray[s], stringArray[s + 1])) {
tempString = stringArray[s];
stringArray[s] = stringArray[s + 1];
stringArray[s + 1] = tempString;
}
}
}
}
for (int i = 0, intInde = 0, stringInde = 0; i < array.length; i++) {
if (isNumber(array[i])) {
array[i] = String.valueOf(intArray[intInde]);
intInde++;
} else {
array[i] = stringArray[stringInde];
stringInde++;
}
}
}
// Метод для сравнения строк: 'а' больше чем '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;
}
}