Обратный SelectionSort для сортировки массива

Моя сортировка выбором здесь проходит через оставшуюся часть массива, ищет минимальное значение, а затем меняет его местами на передний план. Я хочу изменить алгоритм, чтобы он также искал максимальное значение в оставшейся части и менял его на сзади, так что он создает отсортированный список спереди и сзади одновременно.

public  void selectionSort(String[ ] data){
    // for each position, from 0 up, find the next smallest item 
    // and swap it into place
    for (int place=0; place<data.length-1; place++){
        int minIndex = place;
        for (int sweep=place+1; sweep<data.length; sweep++){
            if (data[sweep].compareTo(data[minIndex]) < 0)
                minIndex=sweep;
        }
        swap(data, place, minIndex);
    }
}

У меня есть другой метод, который проверяет, отсортирован ли массив или нет, поэтому решение должно пройти через это.

public boolean testSorted(String[] data) {
    for (int i=1; i<data.length; i++){
        if (data[i].compareTo(data[i-1]) < 0)
            return false;
    }
    return true;
}

Любая помощь будет оценена по достоинству, я занимаюсь этим часами. Я новичок в этом, и я действительно хочу получить его. Спасибо

Это то, что я пробовал:

public  void selectionSort2(String[ ] data){
    // for each position, from 0 up, find the next smallest item 
    // and swap it into place
    for (int place=0; place<data.length-1; place++){
        int minIndex = place;
        for (int sweep=place+1; sweep<data.length; sweep++){
            if (data[sweep].compareTo(data[minIndex]) > 0)
                minIndex=sweep;
        }
        swap(data, place, minIndex);
    }
}

person Nanda Ardianto    schedule 17.09.2015    source источник
comment
Как насчет того, чтобы отменить результат? java.util.Arrays.reverse(array);   -  person ZeAL0T    schedule 17.09.2015
comment
Покажите нам, что вы пробовали. Я не вижу попытки закодировать это самостоятельно.   -  person Andreas    schedule 17.09.2015
comment
Это в значительной степени пузырьковая сортировка ... но почему вы пытаетесь оптимизировать это в первую очередь? Конечно, для небольших алгоритмов O(n^2) чем меньше сложность, тем лучше.   -  person Louis Wasserman    schedule 17.09.2015
comment
@Андреас, я положил туда то, что пробовал   -  person Nanda Ardianto    schedule 17.09.2015
comment
@LouisWasserman Я просто пытаюсь научиться это делать, чтобы протестировать их и сравнить производительность для задания. Я новичок в этом, поэтому я пытаюсь понять, правильно ли я сделал и т. Д.   -  person Nanda Ardianto    schedule 17.09.2015
comment
Как простое переключение < на > заставляет код выполнять оба минимума вперед, и максимума назад, в одно и то же время? Вы изменили 1 символ, как это попытка удвоить действие?   -  person Andreas    schedule 17.09.2015


Ответы (1)


Вам нужно только изменить, и он будет сортироваться в обратном порядке:

В методе selectionSort()

if (data[sweep].compareTo(data[minIndex]) > 0)

и в методе testSorted()

if (data[i].compareTo(data[i-1]) > 0)

Но если вам нужно изменить порядок, чтобы он начал сортировку с конца массива, это будет выглядеть так:

    public static void selectionSort(String[ ] data){
    // for each position, from 0 up, find the next smallest item
    // and swap it into place
    for(int place=data.length-1; place >= 1; place--){
        int maxIndex= place;
        for(int sweep = place-1; sweep >= 0; sweep--){
            if(data[sweep].compareTo(data[maxIndex]) > 0){
                maxIndex = sweep;
            }
        }
        swap(data, place, maxIndex);
    }
person Vladislav Kievski    schedule 17.09.2015
comment
Хорошо, мило, как спасибо. Мне просто было интересно, правильно ли я сделал. - person Nanda Ardianto; 17.09.2015
comment
Этот ответ меняет порядок сортировки, но это не вопрос. В вопросе говорилось, что исходный код переместил минимум вперед, и просил также переместить максимум назад. Переместите min → вперед и/или max → назад, не меняя порядок. - person Andreas; 17.09.2015