我正在尝试将此选择排序从高到低编写,我不太清楚如何做到这一点。我对排序算法很陌生。
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);
}
}
我试图改变它的原因是这里的选择排序贯穿数组的剩余部分,寻找最小值,然后将其交换到前面。我想改变算法,以便它还会查找剩余部分中的最大值,并将其交换到后面,以便它同时从前面和后面构建一个排序列表。
所有帮助将不胜感激:)
答案 0 :(得分:2)
您只需要否定compareTo
方法
if(data[sweep].compareTo(data[minIndex]) > 0)
minIndex=sweep;
答案 1 :(得分:2)
选择排序查找每次迭代中最小的剩余项目并放入正确的位置。相反,您想要找到最大剩余项目。最简单的方法是只需翻转选择条件即可。而不是:
if (data[sweep].compareTo(data[minIndex]) < 0)
您应该使用:
if (data[sweep].compareTo(data[minIndex]) > 0)