[英]How do I “glue” the sorted partition back to a sorted one? (Quick Sort Java Implementation)
[英]My selection sort implementation returns a properly sorted yet reversed list, how do I solve this?
我正在制作一個通用的選擇排序實現,它接收未排序的對象列表並返回已排序的元素列表(基於比較器)。 根據我的單元測試,它似乎可以很好地完成排序部分,除了返回的列表恰好是預期列表的反向版本。
我已經嘗試使用 Collection 框架中的.reverse()方法,但這似乎不起作用。 這是代碼:
public List<E> selInsSort(List<E> items, Comparator<E> comparator) {
// TODO implement selection or insertion sort
//Selection sort O(N²)
for (int i = 0; i < items.size(); i++) {
// Find the minimum element in unsorted array
int min_idx = i;
for (int j = i + 1; j < items.size(); j++)
if (comparator.compare(items.get(j), items.get(min_idx)) == 1)
min_idx = j;
// Swap the found minimum element with the first
// element
if (comparator.compare(items.get(min_idx), items.get(i)) == 1) {
E temp = items.get(min_idx);
items.remove(min_idx);
items.add(i, temp);
}
}
return items;
}
在我看來,沒有必要創建 selInSort() 方法,但如果你堅持那么你可以這樣解決它:
import java.util.Comparator;
import java.util.List;
public class CustomSort<E> {
public List<E> selInsSort(List<E> items, Comparator<E> comparator) {
// TODO implement selection or insertion sort
//Selection sort O(N²)
for (int i = 0; i < items.size(); i++) {
// Find the minimum element in unsorted array
int min_idx = i;
for (int j = i + 1; j < items.size(); j++)
if (comparator.compare(items.get(j), items.get(min_idx)) > 0)
min_idx = j;
// Swap the found minimum element with the first
// element
if (comparator.compare(items.get(min_idx), items.get(i)) > 0) {
E temp = items.get(min_idx);
items.remove(min_idx);
items.add(i, temp);
}
}
return items;
}
}
最后,您可以調用 sort,因此請記住,如果您想要反轉列表,只需將比較器減法從“o2 - o1”更改為“o1 - o2”。
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Stackoverflow {
public static void main(String[] args) {
List<Integer> integerList = new ArrayList<>();
integerList.add(24);
integerList.add(10);
integerList.add(3);
integerList.add(55);
integerList.add(65);
integerList.add(0);
integerList.add(10);
CustomSort<Integer> customSortInteger = new CustomSort<>();
Comparator<Integer> comparator = (o1, o2) -> o2 - o1;
List<Integer> sortedList = customSortInteger.selInsSort(integerList, comparator);
System.out.println(sortedList);
}
}
結果應該是:[0, 3, 10, 10, 24, 55, 65] 我在這里想說的是你需要改變你的比較器條件以獲得不同的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.