簡體   English   中英

我的選擇排序實現返回一個正確排序但反轉的列表,我該如何解決這個問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM