gpt4 book ai didi

java - 归并排序列表实现TopDown + BottomUp + Abstract MergeSort

转载 作者:行者123 更新时间:2023-12-01 09:31:51 25 4
gpt4 key购买 nike

我正在尝试为静态列表(ArrayList)实现合并排序。我有 TopDown 和 BottomUp 实现。但是,我认为抽象合并排序不起作用。我这样说是因为我已经测试了具有相同无序列表的两种实现,这使我相信合并方法是不起作用的。我找不到错误。私有(private)方法位于不同的类中。我把它们放在一起以便于阅读。这是代码。预先感谢您。

    public <T> void merge(@NotNull Comparator<T> comparator, @NotNull List<T> list, int lo, int mid, int hi) {
// // Merge a[lo..mid] with a[mid+1..hi].
List<T> aux = new ArrayList<>(list);// Copy a[lo..hi] to aux[lo..hi].
int i = lo, j = mid + 1;
for (int k = lo; k <= hi; k++) // Merge back to a[lo..hi].
if (i > mid)
list.set(k, aux.get(j++));
else if (j > hi)
list.set(k, aux.get(i++));
else if (comparator.compare(list.get(i), list.get(j)) > 0)
list.set(k, aux.get(j++));
else
list.set(k, aux.get(i++));
}


public <T> void sort(@NotNull Comparator<T> comparator, @NotNull List<T> list) {
sort(comparator, list, 0, list.size() - 1);
}



//TopDown
private <T> void sort(@NotNull Comparator<T> comparator, @NotNull List<T> list, int lo, int hi) { // Sort a[lo..hi].
if (hi <= lo) return;
int mid = lo + (hi - lo)/2;
sort(comparator, list, lo, mid); // Sort left half.
sort(comparator, list, mid+1, hi); // Sort right half.
merge(comparator, list, lo, mid, hi); // Merge results
}

//BottomUp
private <T> void sort(@NotNull Comparator<T> comparator, @NotNull List<T> list) {
for (int mid = 1; mid < list.size(); mid = mid + mid)
// mid: subarray size
for (int lo = 0; lo < list.size() - mid; lo += mid + mid) { // lo: subarray index
merge(comparator, list, lo, lo + mid - 1, Math.min(lo + mid + mid - 1, list.size() - 1));
}
}

最佳答案

merge() 中的代码正在比较输出列表元素 (list),而不是输入列表元素 (aux)。

改变

        else if (comparator.compare(list.get(i), list.get(j)) > 0)

        else if (comparator.compare(aux.get(i), aux.get(j)) > 0)

merge() 不是私有(private)的,并且 merge() 和 sort() 不是静态的,是否有原因?

关于java - 归并排序列表实现TopDown + BottomUp + Abstract MergeSort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39338926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com