如何反向选择排序

时间:2015-09-17 15:51:28

标签: java algorithm sorting selection-sort

我正在尝试将此选择排序从高到低编写,我不太清楚如何做到这一点。我对排序算法很陌生。

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);
    }
}

我试图改变它的原因是这里的选择排序贯穿数组的剩余部分,寻找最小值,然后将其交换到前面。我想改变算法,以便它还会查找剩余部分中的最大值,并将其交换到后面,以便它同时从前面和后面构建一个排序列表。

所有帮助将不胜感激:)

2 个答案:

答案 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)