带有ArrayLists的QuickSort

时间:2014-03-11 07:20:23

标签: java arraylist quicksort

我正在尝试使用ArrayLists实现 quicksort 。但是我不知道如何创建一个包含所有整数的Arraylist<Integer>。我觉得有一种方法可以用来轻松做到这一点。这是我的代码

public static ArrayList<Integer> quicksort(ArrayList<Integer> arr, int min, int max) {
    int pivot = (min + max)/2;
    if (arr.size() <= 1) {
        return arr;
    }
    else {
        ArrayList<Integer> less = new ArrayList<Integer>();
        ArrayList<Integer> greater = new ArrayList<Integer>();
        for (int i : arr) {
            if ( i < arr.get(pivot)) {
                less.add(i);
            }
            else {
                greater.add(i);
            }
        }
        return quicksort(less, min, pivot) + arr.get(pivot) + quicksort(greater, pivot + 1, max);
    }
}

2 个答案:

答案 0 :(得分:2)

您可以使用addAll()

List<Integer> result = new ArrayList<>(less.size() + greater.size() + 1);
result.addAll(less);
result.add(pivot);
result.addAll(greater);

答案 1 :(得分:1)

您可以创建一个方法,为您合并Lists。像这样的东西

private List<Integer> mergeLists(List<Integer> list1, Integer element, List<Integer> list2) {
    List<Integer> mergedList = new ArrayList<>();
    mergedList.addAll(list1);
    mergedList.add(element);
    mergedList.addAll(list2);
    return mergedList;
}

并在return语句中调用此方法。

return mergeLists(quicksort(less, min, pivot), arr.get(pivot), quicksort(greater, pivot + 1, max));

请注意,这只是一个示例,您可以根据需要进行修改。我最初有vararg List<Integer>但发现在这种情况下它不会有用。

如果您希望合并超过2个列表(仅限相同类型的列表),则可以执行此类操作。

private List<Integer> mergeLists(List<Integer>... lists) {
    List<Integer> mergedList = new ArrayList<>();
    for (List<Integer> list : lists) {
        mergedList.addAll(list);
    }
    return mergedList;
}

并使用这样的方法。

List<Integer> combinedList = mergeLists(list1, list2, list3, list4);