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