反向选择排序以排序数组

时间:2015-09-17 18:38:07

标签: java arrays algorithm 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);
    }
}

我有另一种方法来检查数组是否已经排序,因此解决方案必须经过

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 个答案:

答案 0 :(得分:0)

你只需要改变,它就会反向排序:

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