gpt4 book ai didi

java - Java归并排序算法中的递归方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:59 28 4
gpt4 key购买 nike

我的应用程序中有以下合并排序代码。我很困惑递归方法在不满足 if 条件的情况下从 if block 中出来后如何再次调用。

我调试了我的代码,但我仍然没有得到它。调用 mergesort(0, number - 1) 的排序方法首先从 mergesort(0, 5) 开始。 low 小于 high,middle 为 2,因此接下来运行 mergesort(0, 2)。这一直持续到我们有 mergesort(0, 0) 在这种情况下低不小于高,所以它来自 if block 。但是当我调试时,该方法返回,并在 mergesort(0, 0) 案例之后再次开始。调用又是如何发生的?

    public class MergeSort {
private int[] numbers;
private int[] helper;

private int number;


public int[] sort(int[] values) {
this.numbers = values;
number = values.length;
this.helper = new int[number];
return mergesort(0, number - 1);
}

private int[] mergesort(int low, int high) {
// check if low is smaller then high, if not then the array is sorted
if (low < high) {
// Get the index of the element which is in the middle
int middle = low + (high - low) / 2;
// Sort the left side of the array
mergesort(low, middle);
// Sort the right side of the array
mergesort(middle + 1, high);
// Combine them both
merge(low, middle, high);
}
return numbers;
}

private int[] merge(int low, int middle, int high) {

// Copy both parts into the helper array
for (int i = low; i <= high; i++) {
helper[i] = numbers[i];
}

int i = low;
int j = middle + 1;
int k = low;
// Copy the smallest values from either the left or the right side back
// to the original array
while (i <= middle && j <= high) {
if (helper[i] <= helper[j]) {
numbers[k] = helper[i];
i++;
} else {
numbers[k] = helper[j];
j++;
}
k++;
}
// Copy the rest of the left side of the array into the target array
while (i <= middle) {
numbers[k] = helper[i];
k++;
i++;
}
return numbers;

}
}

最佳答案

这是因为 mergesort 方法调用了自己两次。您可以打印堆栈以查看会发生什么。

例如调用mergesort(0,1)时,方法会先调用mergesort(0,0),再调用mergesort(1,1 )

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

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