Обратный 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);
    }
}

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);
    }
Другие вопросы по тегам