gpt4 book ai didi

java - java无效归并排序方法

转载 作者:行者123 更新时间:2023-12-01 04:49:45 24 4
gpt4 key购买 nike

所以,我的计算机科学老师告诉我,除了 copyPartArray 之外,将这里的每个方法都设为无效。我不知道如何做到这一点,当我尝试时,排序根本失败。

public static ArrayList<String> mergeSortHelper(ArrayList<String> a) {
int mid = a.size() / 2 - 1;
if (a.size() <= 1)
return a;
return merge(mergeSortHelper(copyPartArray(a, 0, mid)),
mergeSortHelper(copyPartArray(a, mid + 1, a.size() - 1)));
}

public static void mergeSort(ArrayList<String> a) {
ArrayList<String> x = mergeSortHelper(a);
for (int i = 0; i < a.size(); i++) {
a.set(i, x.get(i));
}
}
public static ArrayList<String> merge(ArrayList<String> a,
ArrayList<String> b) {
ArrayList<String> x = new ArrayList<String>(a.size() + b.size());
int aCount = 0;
int bCount = 0;
for (int i = 0; i < a.size() + b.size(); i++) {
if (aCount > a.size() - 1) {
for (int j = bCount; j < b.size(); j++) {
x.add(b.get(j));
}
break;
}
if (bCount > b.size() - 1) {
for (int j = aCount; j < a.size(); j++) {
x.add(a.get(j));
}
break;
}
if ((a.get(aCount)).compareTo(b.get(bCount)) < 0) {
x.add(a.get(aCount));
aCount++;
} else {
x.add(b.get(bCount));
bCount++;
}
}
return x;
}

public static ArrayList<String> copyPartArray(ArrayList<String> a, int s,
int e) {
ArrayList<String> x = new ArrayList<String>();
for (int i = s; i <= e; i++) {
x.add(a.get(i));
}
return x;

我尝试将合并排序更改为:

    public static void mergeSort(ArrayList<String> a) {
int mid = a.size() / 2 - 1;
if (a.size() <= 1)
return;
mergeSort(copyPartArray(a, 0, mid));
mergeSort(copyPartArray(a, mid + 1, a.size() - 1));
merge(a, copyPartArray(a, 0, mid),
copyPartArray(a, mid + 1, a.size() - 1));
}

并一起摆脱 mergeSortHelper。

现在我有:

    public static void mergeSort(ArrayList<String> a, int start, int end) {
int mid = (start + end) / 2;
if (a.size() <= 1)
return;
mergeSort(a, start, mid);
mergeSort(a, mid + 1, end);

我如何将我的合并方法合并到其中?

最佳答案

copyPartArray 将复制数组,所以这是不好的,你的讲师希望你通过引用传递数组,然后还传递开始/结束(或开始/长度)整数。尝试做这样的事情:

public static void mergeSort(ArrayList<String> a, int start, int length) {
// refer to 'the array' as a[start] to a[start + length]
}

a 将通过引用传递,这意味着您不需要返回值。

因此,我会更改您的方法以采用 startlength 并一起摆脱 copyPartArray ,您可以进行合并-放置在一个数组上。

我在my blog post on Quicksort中使用了这个方法.

关于java - java无效归并排序方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194021/

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