我在學習排序算法。我已經完成了以下鏈接中的程序。爲了簡單起見,我附加了鏈接和程序本身。這個特定的合併排序程序是如何工作的?
public class Mergesort {
private int[] numbers;
private int[] helper;
private int number;
public void sort(int[] values) {
this.numbers = values;
number = values.length;
this.helper = new int[number];
mergesort(0, number - 1);
}
private void mergesort(int low, int high) {
if (low < high) {
int middle = low + (high - low)/2;
mergesort(low, middle);
mergesort(middle + 1, high);
merge(low, middle, high);
}
}
private void merge(int low, int middle, int high) {
for (int i = low; i <= high; i++) {
helper[i] = numbers[i];
}
int i = low;
int j = middle + 1;
int k = low;
while (i <= middle && j <= high) {
if (helper[i] <= helper[j]) {
numbers[k] = helper[i];
i++;
} else {
numbers[k] = helper[j];
j++;
}
k++;
}
while (i <= middle) {
numbers[k] = helper[i];
k++;
i++;
}
}
}
我沒有收到在合併方法的原因包括這最後的一段時間(我< =中部)的任何線索。意味着(j < =高)也存在,但這種情況被忽略。 我得到這個程序的鏈接是http://www.vogella.com/tutorials/JavaAlgorithmsMergesort/article.html
對不起,我的壞解釋。希望有人能向我解釋。
它工作嗎?你有沒有嘗試桌面檢查或調試? – GurV
是的,它正在工作併產生預期的產出。 –