나는 알고리즘 과정에 있으며 병합 정렬에 대해 배우고 있습니다. 우리 교수는이 책에 제공된 의사 코드를 구현하도록 권장했습니다. I는 정수 배열을 정렬 센티넬 값 으로는 Integer.MAX_VALUE를 사용하여 정정Java에서 병합 정렬 구현 질문
- 오전 (라인 아래 병합 방법의 의사 코드 8 & 9에서 사용)?
- Merge-Sort 의사 코드 메소드의 2 행에서 Math.ceil()을 사용하여 Java에서 코드를 작성하는 것이 맞습니까? (편집 : 실제로는 바닥이고 이것을 반영하기 위해 코드를 업데이트했습니다.)
다른 실수가 있으면 알려주세요.
다음은 병합 정렬에 사용되는 의사 코드입니다. 나는 자바에서 코딩하는 방법을 여기
그리고는 다음과 같습니다
public void mergeSort(int[] arrNums, int p, int r) {
if (p < r) {
int q = (p + r)/2;
mergeSort(arrNums, p, q);
mergeSort(arrNums, q + 1, r);
merge(arrNums, p, q, r);
}
}
public void merge(int[] arrNums, int p, int q, int r) {
int nOne = q - p + 1;
int nTwo = r - q;
int[] arrLeft = new int[nOne + 1];
int[] arrRight = new int[nTwo + 1];
for (int i = 0; i < nOne; i++) {
arrLeft[i] = arrNums[p + i - 1];
}
for (int j = 0; j < nTwo; j++) {
arrRight[j] = arrNums[q + j];
}
arrLeft[nOne] = Integer.MAX_VALUE;
arrRight[nTwo] = Integer.MAX_VALUE;
// Tracks arrLeft index
int i = 0;
// Tracks arrRight index
int j = 0;
for (int k = p; k < r; k++) {
if (arrLeft[i] <= arrRight[j]) {
arrNums[k] = arrLeft[i];
i++;
} else {
arrNums[k] = arrRight[j];
j++;
}
}
}
의사 코드에서 'ceil'이 아니라 'floor'입니다. 그리고 여러분이 정수에서 작동한다면, 그것은 어쨌든 함축되어 있습니다. –
무한대를 사용하는 대안은 왼쪽 또는 오른쪽 배열에 더 이상 변수가 없는지 확인한 다음 다른 배열의 나머지 부분을 주 배열에 바보 취급하는 것입니다. –
@ ShadyAtef "멍청한 나머지 ?? ??" "덤프"라는 뜻 이었습니까? – ajb