Вот он код. Но на самом деле просто не врубаюсь, что тут вообще может быть не так. Первый кусок метода сортирует переданный массив. Второй кусок раскидывает отсортированные строки по двум спискам. Третий присваивает ячейкам из изначального массива строки из двух списков. Что вообще не так?
public static void sort(String[] array) {
        String[] sorted = array;
        String reserve;
        for (int y = 0; y < sorted.length - 1; y++) {
            for (int i = 1; i < sorted.length; i++) {
                if (isGreaterThan(sorted[y], sorted[i])) {
                    reserve = sorted[i];
                    sorted[i] = sorted[y];
                    sorted[y] = reserve;
                }
            }
        }

        //Разделение чисел и строк на два списка
        ArrayList<String> stroke = new ArrayList<>();
        ArrayList<String> numbers = new ArrayList<>();
        for (int i = 0; i < array.length; i++){
            if (isNumber(sorted[i]))
                numbers.add(sorted[i]);
            else stroke.add(sorted[i]);
        }

        //Внесение списков в основной массив
        int str = 0;
        int num = 1;
        for (int i = 0; i < array.length; i++){
            if (isNumber(array[i])) {
                array[i] = numbers.get(numbers.size() - num);
                num++;
            }
            else {
                array[i] = stroke.get(i);
                str++;
            }
        }
    }