我的选择排序在这里运行数组的剩余部分,寻找最小值,然后将其交换到前面。我想更改算法,以便它还在剩余部分中查找最大值,并且将它交换到背面,以便它同时从正面和背面建立一个排序列表。
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);
}
}
答案 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);
}