정렬 알고리즘을 배우고 있습니다. 다음 링크에있는 프로그램을 살펴 보았습니다. 간단히하기 위해 링크와 프로그램 자체를 모두 첨부하고 있습니다.이 병합 정렬 프로그램이 어떻게 작동하고 있습니까?
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 < = high) 동안의 수단도 있었지만이 조건은 무시되었습니다. 이 프로그램을 가지고있는 링크는 http://www.vogella.com/tutorials/JavaAlgorithmsMergesort/article.html
죄송합니다. 누군가가 나에게 설명하기를 바랍니다.
작동합니까? 책상 점검 또는 디버깅을 시도 했습니까? – GurV
예, 예상되는 출력을 내고 있습니다. –